使用 find 和 sed 时如何获取文件名

KLM*_*LMM 6 bash sed find shell-script

我正在编写一个脚本来将 sed 应用于某些文件,然后列出已更改的文件,以便我知道哪些已被修改。

这就是我找到然后使用 sed 的方式:

find . -type f -a \( -name "*.txt" -o -name "*.git"\) -a -exec sed -i -e "s/"str1"/"str2"/g" {} +
Run Code Online (Sandbox Code Playgroud)

如何打印更改文件的文件名?我想按排序顺序打印它,以便更容易阅读。

仅使用 sed 时,我们可以这样做:

sed -i 's/$pattern/$new_pattern/w changelog.txt' $filename
if [ -s changelog.txt ]; then
  # CHANGES MADE, DO SOME STUFF HERE
else
  # NO CHANGES MADE, DO SOME OTHER STUFF HERE
fi
Run Code Online (Sandbox Code Playgroud)

但是当一起使用 find 和 sed 时我该怎么做呢?我检查了手册页并尝试了很多东西,但没有任何效果。

unx*_*nut 0

exec编写一个执行您想要的操作的小脚本并将该脚本作为 的参数应该很容易find。您已经有了该脚本,如果您替换$filename$1,则您已经拥有了它。您的脚本将采用以下形式

#!/bin/bash
sed -i 's/$pattern/$new_pattern/' $1
echo $1 >> changelog
Run Code Online (Sandbox Code Playgroud)

我们称这个脚本为ed_notify。现在,您可以通过以下方式在选定的文件上运行它

cat changelog >> changelog.old
rm changelog
find . -type f -a \( -name "*.txt" -o -name "*.git"\) -a -exec ed_notify {} \;
Run Code Online (Sandbox Code Playgroud)

  • 请编辑您的答案,使其真正提供答案。目前,这是一条仅提供建议的评论。 (2认同)