Используйте команду 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'

Связанный контент