찾기 결과의 파일에 대해 명령 실행

찾기 결과의 파일에 대해 명령 실행

계층 구조에서 동일한 이름(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( ) 를 설정해야 할 수도 있지만

관련 정보