2

Для десятков тысяч строк с одинаковой структурой я хочу пойти (например) отсюда:

abcd 12345 qwerty asdfg

...сюда:

abcd 12345,qwerty asdfg

...с

sed 's/[0-9]\ [A-Z]/,/g'

Я могу сопоставить пространство справа и оба окружающих символа (5 q), но в замене я получаю (очевидно):

abcd 1234,werty asdfg

Кроме того, я бы предпочел выполнить это в оболочке Linux

Как я могу сопоставить и заменить для каждой строки только тот пробел, которому предшествует цифра и буква алфавита? Вы бы предложили мне другой инструмент (или даже подход) вместо этого, чтобы сделать это?

1 ответ1

2

Пытаться:

$ echo 'abcd 12345 qwerty asdfg' | sed -E 's/([[:digit:]]) ([[:alpha:]])/\1,\2/g'
abcd 12345,qwerty asdfg

Заметки:

  1. Мы добавили -E чтобы получить расширенный синтаксис регулярных выражений.

  2. [:digit:] и [:alpha:] используются вместо 0-9 и A-Z , чтобы быть безопасными для Unicode.

  3. Парены используются для создания групп, и мы можем сослаться на текст замены. В нашем случае \1 обозначает число, а \2 обозначает букву.

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