2010-12-11 94 views
1

我想它來檢測FILE_1以下模式的sed:使用正則表達式

STRING_1 : "STRING_2" 

並追加STRING_2至FILE_2

這就是我現在所擁有的:

sed 's/STRING_1\s*:\s*"\([^"]*\)"/\1/g' FILE_1 >> FILE_2; 

但這不起作用,它會向FILE_2附加大量隨機內容(不應該匹配)。不知道我做錯了什麼......

+2

你可以給出一個輸入例子,它失敗了嗎? – codaddict 2010-12-11 02:45:58

回答

1

有點冒險回答改變問題規範,但...

perl -ne 'print "$1\n" if (/.*STRING_1\s*:\s*\"([^"]*)\".*/)' FILE_1 >> FILE_2 

似乎做工精細

1

如果STRING_1之前的文字和STRING_2後,它會不會與當前的正則表達式刪除,因此將獲得附加到FILE_2

爲了解決這個問題,在開始和你目前的圖案的末尾添加.*

sed 's/.*STRING_1\s*:\s*"\([^"]*\)".*/\1/g' FILE_1 >> FILE_2; 
     ^^       ^^ 
+0

這意味着你的正則表達式不起作用。給我們一些你輸入的樣本。 – codaddict 2010-12-11 03:31:48

0

將其改爲:

sed 's/.*STRING_1\s*:\s*"\([^"]*\)".*/\1/g' FILE_1 >> FILE_2;   

,但它仍然附加整個文件,而不是正則表達式匹配

0

使用sed -n如果你不想sed輸出都默認爲每一行和p修改打印匹配的結果。

sed -n -e 's/foo/bar/gp' FILE_1 >> FILE_2