我想刪除一對「};」之間的所有文本「其中包含特定的關鍵字。 我要的是正則表達式,多行
輸入:
}; text text KEYWORD text text };
輸出:
}; };
推薦我一個簡單的正則表達式。我知道'sed'會被使用。
我想刪除一對「};」之間的所有文本「其中包含特定的關鍵字。 我要的是正則表達式,多行
輸入:
}; text text KEYWORD text text };
輸出:
}; };
推薦我一個簡單的正則表達式。我知道'sed'會被使用。
這應該在大多數情況下工作:
sed '/};[^}]*};/{s/};[^}]*};/}; };/;b};/};/!b;:a;N;/\n[^}]*};/!ba;s/[^;]*\n.*\n[^}]*/ /' inputfile
有可能會是一些角落情況下失敗。如果您希望結果在兩行上,請將結尾處的空格更改爲\n
。
實例:
}; test ;}
變得}; };
};
變得
test
};}; };
abc };
變得
test
}; defabc }; }; def
abc }; 111
變得
test1
test2
222 }; defabc }; }; def
下面的正則表達式匹配,你要刪除的東西 -
(?<=\};).*?KEYWORD.*?(?=\};)
編輯:使用sed由@Tim指出了sed的不支持該不會工作lookarounds。
這不是查找關鍵字,並且不會在sed中工作(沒有查找)。 – 2010-09-17 08:39:43
感謝@Tim將它引入我的注意事項。固定。是的,這是普通的正則表達式,我不確定sed的具體情況。 – Gopi 2010-09-17 08:42:51
可能的最簡單的方法:
cat file.in | sed "/KEYWORD/s/};[^}]*};/}; };/g" > file.out
http://en.wiktionary.org/wiki/please – 2010-09-17 08:37:33
對不起,我不知道協議。我會記住現在開始 – sole007 2010-09-17 09:05:08