[英]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.