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 时我该怎么做呢?我检查了手册页并尝试了很多东西,但没有任何效果。
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)