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

Bash/Shell/Perl-如何用单个空格替换可变数量的空白?,bash,shell,perl,cut,tr,Bash,Shell,Perl,Cut,Tr,如果之前有人问过,请道歉;我找不到任何与shell相关的答案 我有一个带有空格的文本文件,字符串之间有不同数量的空格 示例: 恰巴·利布古斯·利布维特·格利布 libpulsar lsd的针式简单扫描加密卫星 oxipng spice协议python docker机器完成hss nomadruby@2.4 python@2doitlive hstr努比                 ruby@2.5读线八度sdcv sqlite ECCODE imagemagick opendbx sip 所

如果之前有人问过,请道歉;我找不到任何与shell相关的答案

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

示例:

恰巴·利布古斯·利布维特·格利布 libpulsar lsd的针式简单扫描加密卫星 oxipng spice协议python docker机器完成hss nomadruby@2.4 python@2doitlive hstr努比                 ruby@2.5读线八度sdcv sqlite ECCODE imagemagick opendbx sip

所需输出:

查法-利伯古斯-利伯维特-格利布针简单扫描加密卫星 lsd协议python

我已经尝试了一些sedtrcutperl和其他尝试,但似乎无法将变量空格缩减为单个空格字符


任何帮助都将不胜感激。

请尝试以下内容(无法测试,因为OP的预期输出不清楚)

尝试:


Perl中的命令行解决方案

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

请在您的帖子中添加您为解决问题所付出的努力以及预期的输出示例。那么请告诉我们。
sed
应该可以工作。展示你所尝试的。嗨@Louger,我尝试过这个:sed's//\s\+//g',sed-I's///g',etc@Dirk_Klauser当前位置如果您编辑您的问题以添加一些您尝试过的事情的示例,那么我们将能够解释您误解的内容。这难道不比给你一个答案更有用吗?嗯,它输出以下内容:安妮?卷曲openssl?gearman?libgpg错误?mpv?spdlog?贵宾易信?赛顿?地理更新?libuv?节点构建?斯芬克斯webp大胆?达特西姆?git打开了吗?libxc?open-@Dirk_Klauser,正如你在帖子评论中提到的。使用预期输出的示例编辑您的帖子。因为它不清楚。@Dirk_Klauser,是的,我的命令在运行时提供了正确的输出(您已在帖子中发布)。你只在样品上检查了吗?在我看来,你们显示的输入文件和上面显示的输出都是一样的吗?
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
$ perl -pe 's/\s+/ /g' original.txt > cleaned.txt