我想在sed中刪除一個模式,僅在第二次發生時刪除。這是我想要的,刪除一個模式,但第二次出現。sed在第二次發生時替換
是什麼在FILE.CSV:
a,Name(null)abc.csv,c,d,Name(null)abc.csv,f
a,Name(null)acb.csv,c,d,Name(null)acb.csv,f
a,Name(null)cba.csv,c,d,Name(null)cba.csv,f
輸出想要的東西:
a,Name(null)abc.csv,c,d,Name,f
a,Name(null)acb.csv,c,d,Name,f
a,Name(null)cba.csv,c,d,Name,f
這是我的嘗試:
sed -r 's/(\(null)\).*csv//' file.csv
這裏的問題是,正則表達式是太貪婪,但我不能停下來。 我也試過這樣,跳過「空」中第一次出現:
sed -r '0,/null/! s/(\(null)\).*csv//' file.csv
也試過,但貪婪的正則表達式仍是問題。
sed -r 's/(\(null)\).*csv//2' file.csv
我讀過?
可以使正則表達式「懶」,但我不能讓它鍛鍊。
sed -r 's/(\(null)\).*?csv//' file.csv
如果你可能有3個或更多'(null)'s,並且你只想刪除第二個事件,那麼I t哼,使用'。*?'而不是'。*'來處理perl會更容易。 –