2015-07-04 41 views
0

什麼是在UNIX中的兩個關鍵字之間grep文本最簡單的方法?如何獲得unix變量中關鍵字之間的文本

例如:

unix_var="line1\nline2\n start_keyword \n ..........\n end_keyword ........" 

我需要解析出start_key和end_key(含)之間的文本。

我試圖使用sed但無法獲得所需的結果。

echo "line1\nline2\n start_keyword \n ..........\n end_keyword ........" | sed -n '/ start_keyword/,/end_keyword/p' 
line1\nline2\n start_keyword \n ..........\n end_keyword ........ 

請指教。

+0

你的問題是,回聲不解釋'\ n'。你需要使用'echo -ne'或'printf'。 – ikrabbe

回答

0

使用grep -o

echo "$unix_var" | grep -o 'start_keyword.*end_keyword' 
start_keyword \n ..........\n end_keyword 

如果你有BASH那麼你可以做,在BASH本身:

[[ $unix_var =~ (start_keyword.*end_keyword) ]] && echo "${BASH_REMATCH[1]}" 
start_keyword \n ..........\n end_keyword 
0

下面是一個例子

echo -ne "line 1\nline 2\nstart key\nmid line\nend key\nlast line\n"|sed -ne '/^start key/,/^end key/p' 

爲我的作品。

0
unix_var="line1\nline2\n start_keyword \n ..........\n end_keyword ........" 

最簡單的方法來提取start_keywordend_keyword是之間的文本使用子串提取子串刪除。一個例子是:

text=${unix_var##*start_keyword} # remove from start through start_keyword 
text=${text%end_keyword*}  # remove from end through end_keyword 

想要的文本現在在text。使用子去除:

text=${unix_var/*start_keword/} 
text=${text/end_keyword*/} 

的結果將是text相同。

相關問題