![在unix中格式化文件时如何避免数据修剪](https://linux22.com/image/142146/%E5%9C%A8unix%E4%B8%AD%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%96%87%E4%BB%B6%E6%97%B6%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E6%95%B0%E6%8D%AE%E4%BF%AE%E5%89%AA.png)
我有一个以下格式的文件
A |b -c | c | d -c | | |
我需要像下面这样格式化上面的文件
A|b -c|c|d -c|||
请注意,我不想删除数据中的空格。我只想删除数据终止符之前的额外空格,即 | (管道)。
答案1
一种选择是使用sed
“用管道替换一个或多个空格,然后用管道替换”——并对这些空格和管道的每次出现执行此操作:
sed 's/ *|/|/g' < input > output
同时删除空格后管道:
sed 's/ *|/|/g; s/| */|/g' < input > output
答案2
您可以使用 Awk,将输入字段分隔符设置为由任意数量的空格包围的管道,并将输出字段分隔符设置为仅一个管道:
awk 'BEGIN {FS="[ \t]*\\|[ \t]*"; OFS="|"} {$1=$1} 1' file