我有这样的文字:
Paket telah dikirim melalui TIKI, no.resi 885000130000, Cek status pesanan di https://tiki.id/resi/
我想要只查看885000130000
部分,这就是我尝试的内容:
echo "$text" | grep -Eo 'Paket telah dikirim melalui TIKI, no\.resi (.*),'
但结果总是
Paket telah dikirim melalui TIKI, no.resi 885000130000,
我只想让grep只显示数字885000130000
。我该怎么做?
答案 0 :(得分:1)
<强>解决:强>
echo "$text" | grep -oP 'Paket telah dikirim melalui TIKI, no\.resi \K(\d+)'
答案 1 :(得分:1)
如果您的字符串/ Input_file与显示的示例相同,那么下面的内容也可以为您提供帮助。
awk '{sub(/.*no.resi /,"");sub(/,.*/,"")} 1' Input_file
答案 2 :(得分:1)
如果这不是你所需要的全部:
$ awk '{print $7+0}' file
885000130000
然后编辑您的问题以澄清您的要求。如果您需要匹配该字符串的其余部分,则可能需要其中任何一个:
$ awk '/Paket telah dikirim melalui TIKI, no\.resi/{print $7+0}' file
885000130000
$ awk 'sub(/Paket telah dikirim melalui TIKI, no\.resi/,""){print $0+0}' file
885000130000
这取决于您的要求的未说明的细节。上述任何一个都可以高效,健壮,可移植地与任何UNIX机器上的任何shell中的任何awk一起使用,并且如果/当您的需求发生变化时,这些awk很容易修改。
答案 3 :(得分:0)
使用sed
,您只能打印包含-n
选项后跟.../p
的行。
此解决方案仅显示每行一个匹配。
echo "${text}" | sed -n 's/.*Paket telah dikirim melalui TIKI, no\.resi (.*),.*/\1/p'
在您当前的示例中,您只需要所有数字:
echo "${text}" | grep -Eo "[0-9]*"
或(当你有其他数字时)使用2 grep's
:
echo "${text}" |
grep -Eo 'Paket telah dikirim melalui TIKI, no\.resi [0-9]*,' | grep -Eo "[0-9]*"
答案 4 :(得分:0)
awk -F'[, ]' '{print $8}' file
output
885000130000