계층 구조에서 동일한 이름(myfile)을 가진 여러 파일을 일부 변경하고 싶습니다. 기본적으로 파일의 첫 번째 줄을 "my new line"으로 바꾸고 두 번째 줄을 삭제하고 싶습니다. 나는 이것을 시도한다:
find . -name myfile -exec cat {} \; | sed -i -e '1 c my new line' -e '2d'
myfile이 명령을 실행하는 디렉터리에 있으면 계층 구조의 낮은 수준에서는 작동하지만 상위 수준에서는 작동하지 않습니다.
다음과 같은 오류 메시지가 있습니다.
sed: no input files
find: ‘cat’ terminated by signal 13
어떻게 해야 하나요? (저는 Unix 명령에 대해 잘 모릅니다.) 요점은 cat의 출력을 sed로 리디렉션하고 발견된 동일한 파일을 수정하는 것입니다.
답변1
이 cat
명령을 건너뛰면 문제가 해결될 수 있습니다.
find . -name myfile -exec sed -i -e '1 c my new line' -e '2d' {} \;
exec의 인수는 {}
파일 이름이므로 sed -i
각 파일에 대해 명령을 실행합니다.
답변2
find
먼저 호출 하지 않고도 sed를 사용하여 줄을 변경할 수 있습니다 .
sed -i '1c my new line' **/myfile
shopt -s globstar
먼저 globstar( ) 를 설정해야 할 수도 있지만