我有一个curl命令对文本文件的响应,如下所示:
<att id="owner"><val>objs/13///user</val></att><att id="por"><val>objs/8/</val></att><att id="subType"><val>null</val></att><att id="uid"><val>14</val></att><att id="webDavPartialUrl"><val>/Users/user%
我需要找到字符串>objs/8/</val>
和<att id="uid">
我尝试了awk,sed和grep,但所有上述特殊承租人都有问题,是否可以选择将文本视为简单的租船人?
答案 0 :(得分:3)
将grep
与--
一起使用(解释为here)
$ grep -o -- '>objs/8/</val>.*<att id="uid">' pattern
>objs/8/</val></att><att id="subType"><val>null</val></att><att id="uid">
有关与grep的更具体匹配,您可以参考this question。
否则,因为您的输入似乎是XML,您应该考虑在其上使用XPATH表达式。更具体地说,似乎你想要
检索<att id="subType">
,这应该很容易表达。
在您的示例周围添加了<test>
和</test>
,我可以使用xmllint
来检索该值。
$ xmllint --xpath '/test/att[@id="subType"]' pattern
<att id="subType"><val>null</val></att>
答案 1 :(得分:0)
使用Perl:
perl -ne 'print "$1\n" if m#>objs/8/</val>(.*)<att id="uid">#' file
输出:
</att><att id="subType"><val>null</val></att>
说明:
$1
是捕获的字符串(.*)
m##
作为匹配运算符而非标准Perl //
,以便忽略特殊的/
字符