使用 sed ,您可以轻松更改多个文件中的文字,例如:
sed -i 's/cashtestUS/cheque_usd/g' *.xml
问题是这具有巨大的力量,复杂的正则表达很容易产生不可预见的后果。
有没有一种简单的方法可以做到:
1)回应所做的改变
2)在预览模式下运行 sed ,以便预览潜在的更改
答案 0 :(得分:11)
在没有-i
的预览模式下运行:
sed -e 's/cashtestUS/cheque_usd/g' *.xml
(-e
不是必需的;它只是说下一个参数是sed
脚本,或sed
脚本的一部分。)这会将所有输出写入标准输出。您可能会将其通过less
(或more
),或通过grep
传递,以查看更改的行是您预期的行。或者您可以一次处理一个文件并运行差异:
for file in *.xml
do
echo "$file"
sed -e 's/cashtestUS/cheque_usd/g' "$file" | diff -u "$file" -
done
或......
答案 1 :(得分:1)
有几个'调试/显示操作'
=
显示当前行号l
在内容末尾显示当前工作缓冲区内容$
i
和a
可用于显示i \
Debug trace here
h;s/.*/Debug Trace here/;g
非常有用,并且不会出现在行结束处理中,如i
或a
样品:
echo "line 1
and two" | sed ':a
=;h;s/.*/Before substitution/;g;l
s/..$/-/
=;l
t a'