我有这样一句话:
22.665774 Fr RMSG 0 0 1 1 18 11 Rx 0 308002 5 20 1d6 x 20 20 a8 4f 35 40 1b 00 0f 08 f7 89 ff fa ff f3 35 80 49 00 00 00 00 30 00 00 80 ab 4b 54 40 f0 00 fc 714a81 1 40937
我想解析它并以这种方式替换它只获得这部分:
a8 4f 35 40 1b 00 0f 08 f7 89 ff fa ff f3 35 80 49 00 00 00 00 30 00 00 80 ab 4b 54 40 f0 00 fc
此刻我正在使用它:
sed -re \"s/^.+x//\
但是这只能给我x之前的部分..你能给我一些提示吗?
谢谢。
答案 0 :(得分:2)
答案 1 :(得分:0)
它必须是sed吗? cut
完美无缺。
echo '22.665774 Fr RMSG 0 0 1 1 18 11 Rx 0 308002 5 20 1d6 x 20 20 a8 4f 35 40 1b 00 0f 08 f7 89 ff fa ff f3 35 80 49 00 00 00 00 30 00 00 80 ab 4b 54 40 f0 00 fc 714a81 1 40937' | cut -d' ' -f22-53
答案 2 :(得分:0)
您可以使用此表达式匹配整行并捕获x <hex> <hex>
之后的字符串:
.*?\sx\s\w*?\s\w*?\s(.*?)\s\w{4,}.*
这假设x
始终是您要切断字符串其余部分的分隔符。
修改强>:
在命令行上执行此命令的完整命令:
echo " 22.665774 Fr RMSG 0 0 1 1 18 11 Rx 0 308002 5 20 1d6 x 20 20 a8 4f 35 40 1b 00 0f 08 f7 89 ff fa ff f3 35 80 49 00 00 00 00 30 00 00 80 ab 4b 54 40 f0 00 fc 714a81 1 40937" | perl -pe "s/.*?\sx\s\w*?\s\w*?\s(.*?)\s\w{4,}.*/\1/"
答案 3 :(得分:0)
我不熟悉sed,但这适用于一般的正则表达式:
此正则表达式将匹配字符串"a8 ... fc"
,其中"..."
可以是十六进制字节(仅小写字母)和空格的任意组合:
/a8([0-9a-f ]+)fc/
然后,您可以使用相同的正则表达式使用替换:
/a8$1fc/
此处$1
将替换为括号([0-9a-f ]+)
之间的匹配。