여러 파일에서 단어가 포함된 줄을 삭제하는 방법은 무엇입니까?

여러 파일에서 단어가 포함된 줄을 삭제하는 방법은 무엇입니까?

<premiered>*.nfo 파일(하위 디렉터리 포함)에 포함된 줄을 삭제하고 싶습니다.

이것이 내가 사용하는 명령입니다

find . -type f -name '*.nfo' -exec sh -c '
  file="$0"
  echo "$file"
  sed -i -e '/<premiered>/d' "&file"
  read line </dev/tty
' {} ';'

불행히도 내가 얻는 것은

-bash: premiered: No such file or directory

문제는 무엇이며 어떻게 해결할 수 있습니까?

답변1

문제는 따옴표를 중첩할 수 없다는 것입니다.폐쇄이전에 참조 /<premiered>/d하고 이후에 다시 엽니다. 이는 <premiered>호출 셸에 노출되어 <>리디렉션 연산자로 해석된다는 의미입니다.

실제로 sed 명령을 쉘 명령으로 래핑할 필요는 없습니다. 다음 인수로 직접 실행할 수 있습니다 find ... -exec.

find . -type f -name '*.nfo' -exec sed -i -e '/<premiered>/d' {} \;

파일 이름도 에코하려면 별도의 다음을 추가하세요 -print.

find . -type f -name '*.nfo' -print -exec sed -i -e '/<premiered>/d' {} \;

관련 정보