回显或预览使用sed-i更改的文本
使用sed可以轻松更改多个文件中的文本,例如:回显或预览使用sed-i更改的文本,sed,Sed,使用sed可以轻松更改多个文件中的文本,例如: sed -i 's/cashtestUS/cheque_usd/g' *.xml 问题在于,这具有巨大的威力,而复杂的正则表达式很容易产生无法预料的后果 有没有一种简单的方法可以做到: 1) 响应所做的更改 2) 在预览模式下运行sed,以便可以预览潜在的更改在预览模式下运行,而无需使用-i: sed -e 's/cashtestUS/cheque_usd/g' *.xml (不需要-e;它只是说下一个参数是sed脚本,或者sed脚本的一部分
sed -i 's/cashtestUS/cheque_usd/g' *.xml
问题在于,这具有巨大的威力,而复杂的正则表达式很容易产生无法预料的后果
有没有一种简单的方法可以做到:
1) 响应所做的更改2) 在预览模式下运行sed,以便可以预览潜在的更改在预览模式下运行,而无需使用
-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
或者…sed有几个“调试/显示操作”
显示当前行号=
显示当前工作缓冲区内容,内容末尾有一个l
$
和i
可用于显示类似a
i的跟踪\ 此处调试跟踪
- 如果未使用保持缓冲器,则a
是有用的,不会出现在治疗结束时,如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'
2020年:关于上述内容,您是否可以分享如何在*.php、*.inc文件上递归读取文件夹及其所有子文件夹中的“for”,然后执行“sed”操作。。。我们可以从命令行运行的类似全局搜索和替换的东西?我知道打印行号很困难,但至少通过这种方法,你可以看到文件名正在运行on@MarcoZen-这不再是一个
sed
问题,而是一个shell问题。假设Bash的版本足够新(4.x可能–4.3起作用;默认情况下不是macOS上的3.x版本),您可以使用shopt-s globstar
,然后在**/*.inc**/*.php中对文件使用;做…任何事…;完成
(请参阅)。您可能还想使用shopt-s nullglob
。很可能zsh
有一个等效的机制;我不知道其他的炮弹。这变成了一个无限的命令。。。不要跑。。。在opensuse 42.3盒上。。。