我正在编写一个脚本来将 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 时我该怎么做呢?我检查了手册页并尝试了很多东西,但没有任何效果。
我试图在文件中查找包含一个或多个 实例的行1234
,但没有其他数字(允许使用非数字字符)。任何其他数字都应导致该行不匹配。
有效示例:
1234
1234 xxx
xxx 1234
1234 1234
1234 xxx 1234
无效的例子:
12341234
12345
1234xxx345
1234 345
1234xxx
xxx1234
1234xxx1234
这是我用过的:
grep -E '^([^0-9]*1234)+[^0-9]*$' file.txt
Run Code Online (Sandbox Code Playgroud)
但是这个命令也输出 12341234 作为有效,我该如何防止?