Bash - чтение файла и замена нескольких пробелов одной запятой - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь написать bash-скрипт, который будет принимать файл с пробелами и выводить тот же файл, но через запятую.Я выяснил, как заменить пробелы запятыми, но я столкнулся с проблемой: есть строки, которые имеют переменное количество пробелов.Некоторые строки содержат 2 или 3 пробела, а некоторые содержат целых 7 или 13. Вот что у меня есть:

sed 's/ /,/g' $varfile > testdone.txt

$ varfile - это имя файла, которое дает пользователь.

Но я не уверен, как решить проблему с переменным пространством.Любые предложения приветствуются.Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Это не работа для sed.tr более уместно:

$ printf 'foo      bar\n' | tr -s ' ' ,
foo,bar

-s указывает tr раздавить несколько вхождений.Кроме того, вы можете обобщить с помощью tr -s '[:space:]' , (который заменит символы новой строки, возможно, нежелательно) или tr -s ' \t' , для обработки пробелов или табуляции.

0 голосов
/ 11 декабря 2018

Вам просто нужно использовать квантификатор +, чтобы соответствовать одному или более

Предполагая, что GNU sed

sed 's/ \+/,/g' file
# or
sed -E 's/ +/,/g' file

С GNU basic В регулярных выражениях квантификатор "один или несколько" равен \+
При использовании GNU с расширенными Регулярными выражениями квантификатор "один или несколько" равен +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...