嗨我想要刪除一行使用sed,如果它匹配在同一行中的2個正則表達式。 EG行以/開頭,以* /(註釋)結束。以下腳本將完成大部分工作。 sed -e'/ ^/*/d'-e'/ */$/d'文件名稱 該腳本將刪除以*開頭並以* /結尾的所有行。我希望它只在符合兩個標準而不是一個標準時才刪除該行。SED:匹配在同一行上的2個模式
2
A
回答
2
嘗試
sed '/^\/\*.*\*\/$/ d' filename
這裏的關鍵是,你可以八九不離十將兩個正則表達式模式爲一體,通過簡單地將它們與.*
,其中「任意數量的任何字符的」匹配連接。當然,這強制了兩者之間的順序。第一個模式^\/\*
必須出現在第二個\*\/$
之前,以便匹配此特定模式。
此外,由於*
在正則表達式中有特殊含義,所以一定要逃離你的矩陣,就像你必須逃避你的斜線一樣。
0
這剔除了多行註釋以及
如
# cat file
blah blah /* comment */
words1
words2
/* multiline
comments
/*
end
$ awk -vRS='*/' '{ gsub(/\/\*.*/,""); }1' file
blah blah
words1
words2
可以在另一臺過濾器添加到sed 's|\/\/.*||'
過濾掉//
意見以及
0
爲了您的具體問題,你可以做一些事情沿着@echo推薦的路線。但是,如果您需要更通用的解決方案,例如,正則表達式匹配的解決方案不是錨定在行的一端或另一端,或者可能以行中的任一順序錨定,或者甚至可能重疊,您會像下面的sed腳本:
/regexp1/! b notboth
/regexp2/! b notboth
:both
# sed commands if both patterns match
n
:notboth
# sed commands if at least one pattern doesn't match
n
這使用sed的分支能力。如果模式匹配成功,則b
命令會跳轉到指定的標籤,模式上的尾部!
會反轉匹配的意義。所以,大致上,
把它放在一個文件中,比如foo.sed
,並運行它作爲sed -f foo.sed
。
相關問題
- 1. sed在同一行上匹配模式後插入字符串
- 2. 在同一行匹配多個模式
- 3. SED多模式在行內匹配
- 4. 兩個上相同sed命令模式匹配
- 5. sed:模式匹配後在N行上執行替換
- 6. 用sed打印每個匹配模式的第一行
- 7. SED提取2次模式匹配後第一次出現
- 8. 如何在匹配模式之前使用sed插入一行
- 9. sed的:一個匹配
- 10. SED刪除兩個模式匹配之間的行
- 11. 刪除使用sed匹配多個模式的行
- 12. sed替換吃不匹配的模式
- 13. 使用sed的空白模式匹配
- 14. Sed提取兩種模式之間的第一個匹配
- 15. 試圖匹配與grep相同的行上的多個模式
- 16. 在同一行匹配具有n次模式的行
- 17. sed的:在一些字節匹配模式
- 18. sed只有最後一個匹配模式
- 19. Sed匹配模式時插入值
- 20. 匹配模式和追加SED
- 21. SED匹配模式\ tTEXT \ t不工作
- 22. sed:使匹配行上的所有內容小寫在模式的右邊
- 23. 需要匹配同一行中的多個模式 - Perl
- 24. 如何打印值/值是在匹配模式的下一行使用sed的
- 25. 檢測連續兩行相匹配的模式sed的
- 26. 使用sed中的變量匹配模式的行
- 27. 不匹配行後多行模式單sed腳本打破
- 28. 刪除匹配行的sed
- 29. 匹配模式1和/或模式2
- 30. REGEXP模式匹配2個不同的符號