簡體   English   中英

sed 將兩個搜索條件應用於單個行,然后替換

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM