用sed替换字符串

时间:2013-05-31 11:25:06

标签: regex string sed

我有这样一句话:

 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之前的部分..你能给我一些提示吗?

谢谢。

4 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

\sx\s(?:[0-9a-f]{2}\s){2}(.*?)\s\w{3,}

这将返回您在捕获组中所需的部分。经过测试here

答案 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 ]+)之间的匹配。