2011-05-01 122 views
1

這裏是我使用sed(在bash,centos中)的一些示例文本。我已將文本分成幾行以便於閱讀。 但下面的文本通常都在一行上。Sed搜索替換模式(bash)

一些文本 (Abc_3.7 | AUTODETECT |「} {\ fldrslt \平原\ F2 \ FS20 \ CF2 3:7}} \平原 \ F2 \ FS20

Xyz_3 0.16 | AUTODETECT | 「} {\ fldrslt \平原\ F2 \ FS20 \ CF2 16}} \平原 \ F2 \ FS20多個文本,

Qr_3.11 | AUTODETECT |」} {\ fldrslt \平\ F2 \ FS20 \ CF2 11}} \平原 \ F2 \ FS20東西

我想從每個條目剝離: | AUTODETECT |「} {\ fldrslt \平\ F2 \ FS20 \ CF2 3:7}}

\平原}}之間的文本可能會有所不同,所以,我需要選擇一切

。以下是我現在使用的代碼:

s/|AUTODETECT|\"}{\\fldrslt \\plain .*}}/ /g; 

問題期望的結果是:

Abc_3.7 \plain \f2\fs20 Xyz_3.16 \plain \f2\fs20 more text, Qr_3.11 \plain \f2\fs20 something 

實際結果是:

Abc_3.7 \plain \f2\fs20 

回答

1

.*是貪婪和之後「平原」到最後一對右括號的,包括其他的自動檢測等從第一數據匹配的一切你需要一個更精緻的(貪心不足)模式:

sed 's/|AUTODETECT|"}{\\fldrslt \\plain [^}]*}}/ /g' "[email protected]" 

的「[^}]*」的一部分的任何一個任意序列匹配除「}」(和換行)。


如果腳本需要在一個文件中去,然後sed腳本文件包含:

s/|AUTODETECT|"}{\\fldrslt \\plain [^}]*}}/ /g 

和調用變爲:

sed -f sed.script "[email protected]" 

基本上,除了單引號一切進入腳本文件。使用單引號的優點之一是不用擔心逃跑。當腳本必須包含單引號時,您只會遇到任何問題。

+0

哇,謝謝,效果很好。我如何修改你的代碼把它放到我的.sed文件中?我迄今爲止使用sed文件的經驗是它不喜歡引用... – 2011-05-01 01:39:30

+0

非常感謝Jonathon。 – 2011-05-01 02:03:44