Bash / Shell / Perl - Как заменить переменное количество пустого пространства одним пробелом? - PullRequest
0 голосов
/ 21 января 2019

Извинения, если об этом уже спрашивали; Я не смог найти никаких ответов, связанных с оболочкой.

У меня есть текстовый файл с пробелами, в котором между строками есть различное количество пробелов.

Пример:

chafa libgusb libvirt-glib игла криптоминисат простого сканирования либпульсар лсд oxipng spice-протокол python докер-машина-завершение hss nomad ruby@2.4 python @ 2 doitlive hstr numpy ruby@2.5 readline карлик хунспелл ​​октава sdcv sqlite экоды imagemagick opendbx sip

Желаемый выход:

chafa libgusb libvirt-glib игла для простого сканирования криптоминизат libpulsar lsd oxipng spice-protocol python

Я пробовал несколько sed , tr , cut , perl и другие попытки, но, похоже, не могу сократить переменная пробел до одного пробела.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Попробуйте:

list="chafa    libgusb                      libvirt-glib   needle                       simple-scan cryptominisat                libpulsar        lsd                          oxipng                       spice-protocol python                     docker-machine-completion    hss                          nomad                        ruby@2.4 python@2                   doitlive                     hstr                         numpy                        ruby@2.5 readline                   dwarf                        hunspell                     octave                       sdcv sqlite                     eccodes                      imagemagick                  opendbx    sip"

echo "$list" | sed 's/[ ][ ]*/ /g'

chafa libgusb libvirt-glib needle simple-scan cryptominisat libpulsar lsd oxipng spice-protocol python docker-machine-completion hss nomad ruby@2.4 python@2 doitlive hstr numpy ruby@2.5 readline dwarf hunspell octave sdcv sqlite eccodes imagemagick opendbx sip
0 голосов
/ 21 января 2019

Командная строка в Perl

$ perl -pe 's/\s+/ /g' original.txt > cleaned.txt
  • Опция -p указывает Perl перебирать каждую строку во входных данных и печатать выходные данные.
  • Опция -e дает Perl код для запуска в каждой строке ввода.
  • s/.../.../ - оператор подстановки в Perl.
  • /g - это глобальная опция для оператора подстановки.
  • s/\s+/ /g означает «найти все серии одного или нескольких пробельных символов и заменить каждый пустой строкой».
0 голосов
/ 21 января 2019

Не могли бы вы попробовать следующее (не удалось проверить это, так как ожидаемый вывод OP не ясен).

awk '{gsub(/[[:space:]]+/,OFS)} 1'  Input_file
...