很抱歉以前是否曾问过这个问题;我找不到任何与外壳相关的答案。
我有一个带空格的文本文件,在字符串之间有不同数量的空格。
示例:
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 等尝试,但是可以似乎将可变的空白削减为一个空白字符。
任何帮助将不胜感激。
答案 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