在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 ........
请指教。
答案 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_keyword
和end_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
中相同。