如何在unix变量中的关键字之间获取文本

时间:2015-07-04 07:25:18

标签: shell unix

在unix中两个关键字之间grep文本的最简单方法是什么?

示例:

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 ........

请指教。

3 个答案:

答案 0 :(得分:0)

这是一个例子

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

对我有用。

答案 1 :(得分: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

答案 2 :(得分: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中相同。