Bash / Shell / Perl-如何用单个空格替换可变数量的空白?

时间:2019-01-21 00:46:36

标签: bash shell perl cut tr

很抱歉以前是否曾问过这个问题;我找不到任何与外壳相关的答案。

我有一个带空格的文本文件,在字符串之间有不同数量的空格。

示例:

  

chafa libgusb,libvirt-glib   针简易扫描cryptominisat libpulsar lsd   oxipng香料协议蟒搬运工机完成HSS游牧ruby@2.4蟒@ 2 doitlive hstr numpy的   ruby@2.5 readline矮码octave的简单的简单的简单的简单的简单的简单   imagemagick的opendbx sip

所需的输出:

  

chafa libgusb libvirt-glib针简单扫描cryptominisat libpulsar   lsd oxipng香料协议python

我尝试了几次 sed tr cut perl 等尝试,但是可以似乎将可变的空白削减为一个空白字符。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

Perl中的命令行解决方案

$ perl -pe 's/\s+/ /g' original.txt > cleaned.txt
  • -p选项告诉Perl遍历输入中的每一行并打印输出。
  • -e选项为Perl提供了在输入的每一行上运行的代码。
  • s/.../.../是Perl的替代运算符。
  • /g是替换运算符的全局选项。
  • s/\s+/ /g的意思是“查找所有多个空白字符之一,并用一个空字符串替换每个空白字符。”

答案 1 :(得分:0)

请您尝试以下操作(由于OP的预期输出不清楚,因此无法对其进行测试)。

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

答案 2 :(得分:0)

尝试:

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