2014-04-16 50 views
0

我需要使用sed命令提取值; 我有一個文件,它包含這樣的事情:Sed選擇參數的值

field="value" 

結果必須是:value

+1

歡迎堆棧溢出刪除額外的引號。請閱讀[關於]頁面。總的來說,我們更願意幫助那些真誠嘗試解決問題的人,並通過展示他們的最佳嘗試來證明這一點。你的問題是不準確的。您提取的文件是否有一行或多行?所有形式爲'field =「value」'的行?你需要找到特定字段的值,還是所有字段的所有值?如果有兩行具有相同字段名稱的行 - 一個或兩個輸出?一切都是可行的;它們是相當直接的正則表達式應用程序。 –

+0

不是sed,但你可以嘗試這個'perl -lne'print $ 1 if(/ field = \「([^ \」] *)\「/)' – Vijay

回答

3

嘗試

#!/bin/sh                                  
sed -n 's/field="\(.*\)"/\1/p' 

這看起來對具有磁力線=

如果它找到它們,它將刪除除該值之外的所有內容,並打印該值。 否則,它不打印任何東西。

+0

,因爲他有一個文件建議他抓住文件和管道它sed以改善答案...乾杯+1 – ojblass

+0

是的。保存上面的文件爲「編」,並使用它像 ./prog <文件 –

0

只是提供一個awk的選擇,因爲awk往往是更好的選擇,當談到基處理。

您的具體要求尚不清楚,但我在這裏做出如下假設:

  • 場名稱是唯一
  • 還有的=周圍沒有空間,所有值都" -enclosed

以下允許您通過-v fname=...選項傳遞字段名稱,並返回該字段的值未加引號;樣本輸入通過here-document提供。

awk -F\" -v fname='field' '$1 == (fname "=") { print $2; exit }' <<'EOF' 
key="largo" 
field="value" 
id="fake" 
EOF 
0

或者你可以使用awk來尋找「場」,分裂領域使用了「=」,然後使用TR

awk -F= '/field/ {print $2}' <file | tr -d '"'