就地替换与给定文件集中的某些模式匹配的行

就地替换与给定文件集中的某些模式匹配的行

继我之前的问题之后:

从 CSS 和 Javascript 内容内的文件名中删除斜杠/父路径

我得到以下命令,该命令仅用基本名称替换这些文件中的任何文件名:

grep -o -h -E '[A-Za-z0-9:./_-]+\.(png|jpg|gif|tif|css)' |\
  sed "s:[a-zA-z0-9]*/::" `find . -name '*.css' -or -name '*.js'` 

如何将此命令的输出保存回每个处理的文件的源文件中?

答案1

对一个老问题的迟到回答,但我认为这是OP正在寻找的答案:

SEDCMD="/[A-Za-z0-9:./_-]+\.(png|jpg|gif|tif|css)/ s:[a-zA-z0-9]*/::"
find . -name '*.css' -or -name '*.js' -exec sed -i "$SEDCMD" '{}' ';'

答案2

尝试循环,例如:

find . -name '*.css' -or -name '*.js' | while read filename; do
  : $filename is the original file name
done

相关内容