Linux

如何使用 sed 替換特定模式並在同一行中添加異常?

  • December 28, 2019

我正在使用 sed 來查找和替換模式。

我的模式是“-”

我有以下數據

>1-2-3-4-5 29238232382083e-9  
>1-2-3-4-5    29238232382083e-9   
>1-2-3-4-5    29238232382083e-9   
>1-2-3-4-5    29238232382083e-9     

我想用“”替換 1-2-3-4-5 中的“-”,這樣我就可以得到 1234*5

但是,當我用

sed -i -e ‘/-/*/g

所有的“-”都會受到影響,即使是 29238232382083e-9,結果是 29238232382083e*9。

我能做些什麼來替換所有的“-”,除了位於“e”之後的“-”,比如在這種情況下 29238232382083e-9 ?

sed 's/\([^e]\)-/\1*/g' /path/to/input

詳細說明該sed聲明:

  • \([^e]\)-在這裡,我們使用分組來查找除e後跟連字元之外的任何字元
  • \1*- 在這裡,我們將找到的內容替換為該分組中的任何內容(例如連字元之前的非 e),然後是替換該連字元的星號。

請注意,這不適用於作為行首字元的連字元;為此,我們必須添加一個特殊情況:

sed 's/\([^e]\)-/\1*/g;s/^-/*/' /path/to/input

這很相似,但是用星號替換了作為該行第一個字元的連字元。由於它是第一個字元,因此不能在其前面加上e.

引用自:https://unix.stackexchange.com/questions/374038