使用sed -i更改了回声或预览文本

时间:2014-10-01 06:55:22

标签: sed

使用 sed ,您可以轻松更改多个文件中的文字,例如:

 sed -i 's/cashtestUS/cheque_usd/g' *.xml

问题是这具有巨大的力量,复杂的正则表达很容易产生不可预见的后果。

有没有一种简单的方法可以做到:

1)回应所做的改变
2)在预览模式下运行 sed ,以便预览潜在的更改

2 个答案:

答案 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在内容末尾显示当前工作缓冲区内容$
  • ia可用于显示i \ Debug trace here
  • 等跟踪
  • 如果未使用保留缓冲区,则h;s/.*/Debug Trace here/;g非常有用,并且不会出现在行结束处理中,如ia

样品:

echo "line 1
and two" | sed ':a
=;h;s/.*/Before substitution/;g;l
s/..$/-/
=;l
t a'