4

У меня есть файл CSV, где данные в следующем формате

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

Я хочу заменить только те ",", которые появляются между числами, на другие символы, такие как скажем, SOH или $ или *

другие ",", появляющиеся в строке, не должны заменяться, т. е. я хочу получить следующий вывод

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

Может кто-нибудь, пожалуйста, помогите мне с шаблоном команды sed, чтобы получить желаемый результат выше

2 ответа2

5

Попробуй это

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

Первый раздел соответствует цифре, за которой следует запятая, за которой следует цифра или -. В следующем разделе просто извергается первая цифра, символ замены, а затем последняя цифра.

Это перехватит любой шаблон, такой как «#, #» или «#, - #», включая тот, который может быть нежелателен (например, «abc123, -def» -> «abc123 * -def»). Исправление требует больше знаний о входном потоке. (см. комментарии для деталей.)

0

Следующее, кажется, работает:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .