2016-04-25 78 views
0

我有以下sed命令:兩個上相同sed命令模式匹配

sed -n '/^out(/{n;p}' ${filename} | sed -n '/format/ s/.*format=//g; s/),$//gp; s/))$//gp' 

我試圖做它作爲一行中:

sed -n '/^out(/{n;}; /format/ s/.*format=//g; s/),$//gp; s/))$//gp' ${filename} 

但是,這也顯示線我不不想要(那些不匹配的)。

我所擁有的是一些字符串文件爲:

entry(variable=value)), 
format(variable=value)), 
entry(variable=value))) 
out(variable=value)), 
format(variable=value)), 
... 

我只想說來到了入境後立即格式線。並刪除這些尾隨))或),

+0

我知道我可以用grep來做,但是我想用單個命令執行單個命令(或者單個grep,單個awk或單個sed。爲此,我認爲sed會擁有更小的內存/ cpu footprint。 – Lin

+0

您的問題中的第二個sed命令完全適用於您提供的示例輸入。 –

+1

@Lin它會更容易對於所有人來說,如果你需要輸入和輸出樣本。 –

回答

1

您可以使用此sed命令:

sed -nr '/^out[(]/ {n ; s/.*[(]([^)]+)[)].*/\1/p}' your_file 

一旦out被發現,它前進到下一行(n),並使用s命令p標誌只提取括號內的內容。

說明:

  • 我用[(]代替\(。外括號(通常意味着分組,如果你想要一個文字(,你需要將其轉義爲\(或者你可以把它放在括號內。放在括號內時,大多數RE特殊字符不需要轉義。
  • ([^)]+)是指基團(以下簡稱「(」在這裏是RE元字符不是字面括號),其包括不屬於(^)(字面右括號)一種或多種(+)字符,則^反轉字符類[ ... ]
+0

似乎promissing = D只是改變了出來,因爲我可以找到一些變量/值內的單詞。 – Lin

+0

您的回覆非常符合我上面提供的數據。 (我現在注意到這不完全是我原始的源數據)。但是沒關係。我已經做了必要的更正以適合我的實際數據。 – Lin

+0

@Lin改變了'/../' –