我有一个包含很多行的文件。
有些行以不匹配的大括号结尾,即“ }
”
这仅适用于包含以下内容的行".to"
如何使用 sed 删除包含字符串 (" ") 但在行中任何位置(在 之前或之后).to
没有另一个字符串 (" ")但以 " " 结尾的所有行的不匹配大括号?{
.to
}
就像是sed -i '/\.to/s/[[:space:]]*\}//' file
但这适用于包含字符串(“ .to
”)并以“ }
”结尾的所有行
我想要它用于没有大括号/方括号的行,例如{
在}
我不需要为此担心多线大括号。限制与搜索匹配的行(在本例中为“.to”)有助于防止这种情况。
例如
expect(:size).to eq 2 }
expect(:first).to be_persisted }
expect("first.number_field").to eq 10 }
expect(:last).to be_persisted }
expect("last.number_field").to eq 10 }
this remains unchanged }
this {remains} unchanged }
this {
is ok }
=>
expect(:size).to eq 2
expect(:first).to be_persisted
expect("first.number_field").to eq 10
expect(:last).to be_persisted
expect("last.number_field").to eq 10
this remains unchanged }
this {remains} unchanged }
this {
is ok }
答案1
答案2
简单点怎么样
sed -i 's@^\([^{]\+\)\(\.to[^{]\+\)}\s*$@\1\2@' your_file
使用 Perl(为了更好的可读性):
perl -pi -e 's@
^ # start of line
( [^{]+ ) # at least one non-{ character (save in $1)
(\.to [^{]+ ) # .to and at least one non-{ (save in $2)
} # that pesky }
\s* # optional white space
$ # end of line
@$1$2@x' your_file