이 Linux 쉘 스크립트 라인은 무엇을 합니까?

이 Linux 쉘 스크립트 라인은 무엇을 합니까?

다음 쉘 스크립트 행이 수행하는 작업이 정확히 무엇인지 확인하려고 합니다.:

grep --files-with-matches '>' . | sort | uniq | xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

나는 그것이 '9Kp'에 대한 전역 검색을 시도하고 지정된 데이터 파일에서 '9K'로 바꾸려고 시도하고 있다고 확신하지만 그 전에 grep 명령이 무엇을 수행하는지 명확하지 않습니다.

답변1

grep --files-with-matches '>' .

>현재 디렉터리( )에서 를 검색 .하고 일치하는 파일( )의 파일 이름만 인쇄합니다 --files-with-matches.

grep돌아오지 않으니 참고하세요아무것디렉토리( )를 지정했지만 ."재귀" 모드를 활성화하는 것을 잊어버린 경우. 올바른 명령은 다음과 같습니다.

grep --files-with-matches --recursive '>' .

아니면 단순히

grep -Rl '>' .

| sort
| uniq

결과를 정렬하고 중복 항목을 제거합니다.

| xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

추가 인수로 전달된 stdin의 perl ...모든 단어 1을 사용하여 주어진 명령( )을 실행하십시오 .

결과 의 모든 파일 grep/home/user/DATAFILE.DAT파일은 " " 텍스트를 9Kp" 9K "로 대체하여 업데이트됩니다. 이전 파일은 뒤에 물결표가 붙어 백업됩니다.

1 참고:단어, 아니다. 이는 공백이 포함된 파일 이름이 여러 이름으로 처리된다는 의미입니다. xargs -d'\n'완벽하지는 않더라도 더 좋을 것입니다.

관련 정보