Bash/Shell/Perl-如何用单个空格替换可变数量的空白?
如果之前有人问过,请道歉;我找不到任何与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 我已经尝试了一些sed、tr、cut、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 所
任何帮助都将不胜感激。请尝试以下内容(无法测试,因为OP的预期输出不清楚) 尝试:
Perl中的命令行解决方案
$ perl -pe 's/\s+/ /g' original.txt > cleaned.txt
选项告诉Perl迭代输入中的每一行并打印输出-p
选项为Perl提供在输入的每一行上运行的代码-e
是Perl的替换运算符s/../../
是替换运算符的全局选项/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