다음 쉘 스크립트 행이 수행하는 작업이 정확히 무엇인지 확인하려고 합니다.:
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'
완벽하지는 않더라도 더 좋을 것입니다.