我想用多行替换文件中的单行,例如,我想替换特定的函数调用,比方说,
foo(1,2)
Run Code Online (Sandbox Code Playgroud)
同
if (a > 1) {
foo(1,2)
} else {
bar(1,2)
}
Run Code Online (Sandbox Code Playgroud)
我怎么能用bash做呢?
这就是sed s命令的构建方式:
shopt -s extglob
ORIG="foo(1,2)"
REP="if (a > 1) {
foo(1,2)
} else {
bar(1,2)
}"
REP="${REP//+(
)/\\n}"
sed "s/$ORIG/$REP/g" inputfile > outputfile
Run Code Online (Sandbox Code Playgroud)
请注意,REP="${REP//\+(
)/\\n}"只有在您想要以第二行REP的格式化方式定义行时才需要这些行.如果你只是用这样可能比较简单\n,并\t在REP开始说起.
编辑以回应OP的问题
要在不创建新文件的情况下更改原始文件,请使用sed的--in-place标志,如下所示:
sed --in-place "s/$ORIG/$REP/g" inputfile
Run Code Online (Sandbox Code Playgroud)
请注意--in-place旗帜.在运行之前进行备份,因为所有更改都是永久性的.