如何删除多个文件中包含单词的行?

如何删除多个文件中包含单词的行?

<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>会暴露给调用 shell,其中<>被解释为重定向运算符。

实际上没有必要将 sed 命令包装在 shell 命令中 - 您可以直接将其作为以下参数运行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' {} \;

相关内容