我有一个如下所示的日志文件:
sdfsdf
sdfsdf<Pay>1234</Pay> sdfsdfsdf
sdfsdf<Pay>12342323</Pay> sdfsdfsdf
sdfsdf
... 我只想打印出来:
1234
12342323
我正在考虑使用'sed'并拥有以下一行:
sed 's/<Pay>(*)<\/Pay>/\1/g' abc.txt
但我收到错误:
sed:-e表达式#1,字符22:'s'命令的RHS上的无效引用\ 1
如何实现所需的输出?
这是Ubuntu Linux最新版,bash。
答案 0 :(得分:4)
sed -n 's/.*<Pay>\(.*\)<\/Pay>.*/\1/p' file
答案 1 :(得分:2)
grep -o
的完美案例:
grep -oP '(?<=<Pay>).+?(?=</Pay>)'
答案 2 :(得分:0)
sed
需要转义它的捕获括号:\(.*\)
为了获得预期的输出,你需要摆脱余下的线路。只需将其包含在模式中即可。
答案 3 :(得分:0)
使用awk
(由于RS中的正则表达式,只有gawk
或mawk
)
awk 'NR%2==0' RS="</?Pay>" file
1234
12342323