[英]sed apply two search conditions to a single line and then substitute
我想做以下替换
sed 's/$/)/' python2.py
条件是一行包含print(
但它可能不包含print("""
。
它不应该匹配的行将是
print("""Some multi line text etc...
虽然应该匹配这样的行
print("Some single line text"
现在很容易匹配一个或排除另一个,但我无法将这两个条件组合到一个命令中。 例如
sed -ne '/print(/s/$/)/p' python2.py
是否与print(
匹配所有行,但也匹配我想用print("""
省略的行。另一方面,我可以用print("""
跳过所有行
sed -ne /print("""/! s/$/)/p python2.py
但这包括所有其他行,即使是那些没有print(
的行。有没有办法将这两个条件结合起来,以便仅当两个条件对一行都为真时才应用替换?
作为说明:
我知道我可以执行两次 sed 运行,我首先对所有print(
行,然后执行第二次 sed 运行,我删除新替换的)
仅在print("""
行。我想知道是否可以在一个 go 中做到这一点,所以这不是我正在寻找的答案。
您可以使用此sed
忽略已关闭的行)
:
cat file
print("""Some multi line text etc...
print("Some single line text"
print("Some single ""line text"
print("Some single line text")
sed '/print("""/!s/print(".*[^)]$/&)/' file
print("""Some multi line text etc...
print("Some single line text")
print("Some single ""line text")
print("Some single line text")
模式print(".*[^)]$
匹配带有 test from print("
最后带有非)
字符的行。 &)
将)
放在匹配模式的末尾。
这就是你想要做的一切吗?
$ cat file
print("""Some multi line text etc...
print("Some single line text"
$ sed 's/print("[^"].*/&)/' file
print("""Some multi line text etc...
print("Some single line text")
如果不是,请编辑您的问题以显示更真正具有代表性的示例输入/输出,其中包括不适用的案例。
使用 GNU sed,您可以使用
sed '/print("""/!{/print("/s/$/)/}' file > newfile
请参阅在线演示。
详情:
/print("""/!
- 如果找到print("""
,则跳过该行{/print("/s/$/)/}
- 否则,如果行包含print("
,则将行尾替换为)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.