grep 从输出中查找特定字符串

grep 从输出中查找特定字符串

我想从下面的输出中 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 标签的最佳工具,但在Perl 语法的一点帮助下,我们可以执行以下操作:

$ 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/

相关内容