使用 sed 指令替換 , 出現在數字之間

使用 sed 指令替換 , 出現在數字之間

我有一個 CSV 文件,其中數據採用以下格式

|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666

我只想將數字之間出現的那些“,”替換為其他字符,例如 SOH 或 $ 或 *

行中出現的其他“,”不應被替換,即說我希望有以下輸出

|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666

有人可以幫助我使用 sed 指令模式來獲得上述所需的輸出嗎

答案1

嘗試這個

sed 's/\([0-9]\),\(-\?[0-9]\)/\1\*\2/g'

第一部分匹配一個數字,後面跟著一個逗號,後面跟著一個數字或 -。下一節只是重複第一個數字、替換字符,然後是最後一個數字。

這將捕獲任何模式,如“#,#”或“#,-#”,包括一些可能不需要的模式(例如“abc123,-def”-->“abc123*-def”)。解決這個問題需要更多關於輸入流的知識。 (詳情請參閱評論。)

答案2

以下似乎有效:

sed 's/\([0-9]\),\([-0-9]\)/\1\*\2/g'

相關內容