Text-Processing
使用 sed 從字元串中僅刪除特定的文本出現
我有一個文本文件,其中包含多行此類內容:
/*[17:51:27][1 ms]*/ UPDATE `country` SET `region_id` = '4' WHERE `country_id` = '36';
有沒有一種方法可以讓我只
sed
刪除評論,所以這就是以 a 開頭並以 a結尾的所有內容?這將使該行變為:/*``*/
UPDATE `country` SET `region_id` = '4' WHERE `country_id` = '36';
我知道如何使用
sed
刪除以某些內容開頭的整行,在帶有 SQL 的文本文件的範例中,它可能是一個 hash symbol#
。
因為
sed
以某種greedy
方式匹配,所以總是有可能匹配註釋末尾之後的文本,而不是前面真正的註釋結束標記,例如。如在包含“*/”的帶引號的字元串中。這無法
sed
以簡單的方式處理,但您可以解決它。這是一種這樣的方法:使用單字元佔位符作為兩個字元的結束分隔符。使用十六進制值\x01
作為替代字元是安全的(即不會與現有文本衝突),因為它不存在於普通文本中。sed "\|^/\*.*\*/|{ s|\*/|\x01|; s|.*\x01|| }" "$file"
perl
,另一方面,可以選擇處理lazy
匹配(以及更多)。正如約翰衛斯理王子在評論中已經提到的,這裡是懶惰perl
的等價物。perl -ple 's|/\*.*?\*/||g' "$file"