У меня есть 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'