我试图从我的shell脚本中删除重复的空格,但似乎
tr -s " " < input.txt > output.txt
不管用。还有什么其他方法可以从shell脚本中将多个连续的空格删除为单个空格。
我正在尝试从内容中删除空格
1 | First | PO BOX 123 | DAYTON | OH | 3432-222
2 | Second | PO BOX 2223 | CALIFORNIA | CA | 23423
3 | THIRD | PO BOX 21 | COLUMBUS | OH | 2223
进入这个
1|First|PO BOX 123|DAYTON|OH|3432-222
2|Second|PO BOX 2223|CALIFORNIA|CA|23423
3|THIRD|PO BOX 21|COLUMBUS|OH|2223
我喜欢将awk用于具有记录的内容。tr
TR anslates文字,sed
是一个小号tream版itor,但awk
明白的记录,字段,字段分隔符等概念
因此,为了完成您的选择集,以下是最小化awk的解决方案:
$ awk -F ' *\\| *' '{$1=$1} 1' OFS='|' input.txt
1|First|PO BOX 123|DAYTON|OH|3432-222
2|Second|PO BOX 2223|CALIFORNIA|CA|23423
3|THIRD|PO BOX 21|COLUMBUS|OH|2223
这将输入字段分隔符设置为-F
,将输出字段分隔符设置为OFS
。该脚本包含OFS
一个语句(该语句使用重写记录)和一个语句(1
快捷方式)以打印该行。
请注意该-F
选项中竖线的奇怪转义。如果要使用此功能,为避免混淆,您可能想要awk -F ' *[|] *' ...
代替。
为了变得更短以牺牲清晰度为代价,您还可以使用:
$ awk -F ' *[|] *' '$1=$1' OFS='|' input.txt
这将记录重写语句变成始终返回true的条件,从而消除了对1
快捷方式的需要。虽然它可以减少脚本中的几个字符,但我仅出于乐趣而将其包括在内。最好使用不会在一两年内重读的代码。;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句