繁体   English   中英

使用sed替换字符串

[英]using sed to substitute a string

我有这样一条线:

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

谢谢 。

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

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

这将返回您想要的捕获组中的零件。 在这里测试。

它必须被镇静吗? 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

您可以使用此表达式来匹配整行并捕获字符串aftex 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/"

我不熟悉sed,但这适用于一般的regex情况:

此正则表达式将匹配字符串"a8 ... fc" ,其中"..."可以是十六进制字节(仅小写字母)和空格的任意组合:

/a8([0-9a-f ]+)fc/

然后,您可以使用以下命令在同一正则表达式中使用替换:

/a8$1fc/

在这里$1将被括号([0-9a-f ]+)的匹配替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM