用文件中的多行替换一行

rav*_*avi 7 unix bash sed ed

我想用多行替换文件中的单行,例如,我想替换特定的函数调用,比方说,

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做呢?

Tim*_*ote 7

这就是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,并\tREP开始说起.

编辑以回应OP的问题

要在不创建新文件的情况下更改原始文件,请使用sed的--in-place标志,如下所示:

sed --in-place "s/$ORIG/$REP/g" inputfile
Run Code Online (Sandbox Code Playgroud)

请注意--in-place旗帜.在运行之前进行备份,因为所有更改都是永久性的.

  • `shopt -s extglob`是必需的,加号前面的反斜杠需要删除. (2认同)