我想从下面的输出中 grep 并打印禁用的字符串
$ grep "s_icsmstatus" $CONTEXT_FILE
<oa_service_status oa_var="s_icsmstatus">disabled</oa_service_status>
我可以使用类似的东西
$ grep "s_icsmstatus" $CONTEXT_FILE | awk -F ">" '{print $(NF-1)}' | awk -F "</" '{print $(NF-1)}'
disabled
但是有没有其他简单或直接的方法可以做到这一点?
答案1
使用grep -o
:
grep "s_icsmstatus" $CONTEXT_FILE | grep -o 'disabled'
-o
仅提供与所提供模式的精确匹配作为输出o
,而不是进行匹配的整行。
答案2
grep
不是解析 html 标签的最佳工具,但在P
erl 语法的一点帮助下,我们可以执行以下操作:
$ grep -Po 's_icsmstatus">\K[^<]*' $CONTEXT_FILE
disabled
最重要的部分是\K
删除到目前为止匹配的所有内容,我们只打印剩余的内容,即直到下一个的所有内容<
。
答案3
您可以使用以下内容,它更加通用,因为它可以抓取 XML 标记之间的任何单词...而不仅仅是单词“disabled”:
grep "s_icsmstatus" test.txt | | grep "s_icsmstatus" test.txt | awk -F">" '{print $2}' | awk -F"<" '{print $1}'
参考: http://code.scottshipp.com/2013/06/27/easily-extract-data-from-xml-using-grep-and-awk/