2015-07-04 22 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相同。

相关问题