Linux
如何使用 sed 替換特定模式並在同一行中添加異常?
我正在使用 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
.