Рейтинг:0

Заменить последовательность символов на другую

флаг in

У меня есть вывод команды мониторинга сети, и он выглядит так:

                     391 КБ 7,48 МБ 7,86 МБ

У которых много пробелов в первую очередь. Теперь я хочу заменить все пробелы на ,.
Я пытался sed 's/ /,/g' входной_файл > выходной_файл, Но результат не совсем то, что я ожидаю:

,,,,,,,,,,,,,,,,,,,,391 КБ,,,,,7,48 МБ,,,,,7,86 МБ

Я даже пробовал:

sed -r 's/(.*) /\1,/; s///g' файл.txt > output.txt

Но результат был таким, как показано ниже:

391 КБ 7,48 МБ, 7,86 МБ

Как заменить последовательность пробелов одной запятой?
Думаю, стоит упомянуть, что я хочу добавить эти данные в CSV-файл.

Рейтинг:5
флаг hr

Вы можете перенести последовательность из одного или нескольких пробелов в Basic Regular Expressions (BRE), используя либо * (космос-космос-звезда) или \{1,\}. В расширенном регулярном выражении (ERE) вы можете использовать {1,} или же +. Общее название этих конструкций квантификаторы.

$ echo '391 КБ 7,48 МБ 7,86 МБ' | sed 's/ */,/g'
, 391 КБ, 7,48 МБ, 7,86 МБ

$ echo '391 КБ 7,48 МБ 7,86 МБ' | sed -r 's/ +/,/g'
, 391 КБ, 7,48 МБ, 7,86 МБ

GNU sed позволяет вам использовать сбежал \+ в BRE (а также \? для квантификатора 0 или 1) — как и GNU grep.

Вы также можете использовать тр, с (--squeeze-повторяет) флаг:

$ echo '391 КБ 7,48 МБ 7,86 МБ' | тр -с '' ,
, 391 КБ, 7,48 МБ, 7,86 МБ

Однако, если вам не нужно пустое начальное поле CSV, рассмотрите возможность использования awk, поскольку с разделителем полей по умолчанию он будет рассматривать непрерывные пробелы как один разделитель и игнорировать начальные пробелы:

$ echo '391 КБ 7,48 МБ 7,86 МБ' | awk '{$1=$1} 1' OFS=,
391 КБ, 7,48 МБ, 7,86 МБ
Рейтинг:0
флаг gi

Использование sed

эхо '391 КБ 7,48 МБ 7,86 МБ' | sed -r 's/^ +//g;s/ +/,/g'

у тебя будет

391 КБ, 7,48 МБ, 7,86 МБ

Или, наоборот, если разделителем является пробел, и вы можете объединить несколько пробелов, вы также можете использовать большой Миллер этим способом

эхо '391 КБ 7,48 МБ 7,86 МБ' | млр --n2c --ifs '' -N --repifs кошка

иметь

391 КБ, 7,48 МБ, 7,86 МБ

Начиная с файла

<input mlr --n2c --ifs ' ' -N --repifs cat >output.csv

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.