簡體   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