我有一个带有3列的制表符分隔文本文件。
在某些列中,我想删除单个或多个空格。但我想保持每列之间的标签分隔以及换行符。
我试过
perl -lape 's/\s+//sg
但删除了所有空格,也删除了制表符空格
我的文件看起来像这样
col1 col2 col3
1 test test
2 test test
3 test test
我想要
col1 col2 col3
1 test test
2 test test
3 test test
所以我只想保留不同列之间的制表空间,而不是单个空格。我希望这很清楚。
答案 0 :(得分:6)
只需删除空格,而不是\s
,它也与标签匹配:
sed 's/ \+//g' file
如果你想删除这些空格,只要它们出现在标签之后,请说:
sed 's/\t */\t/g' file
\ s 匹配空白字符,集合[\ \ t \ r \ n \ n \ f]和其他
答案 1 :(得分:4)
如果它只是空格,您可以使用' '
代替\s
。
E.g。
s/ //g;
当然,如果您正在进行lape
而-a
表示“在空白处进行自动分割”,您可以:
perl -ane 'print join ("\t", @F );'
答案 2 :(得分:2)
你可以创建自己的角色类,它是不空格和标签的所有东西的否定,这个字符类代表所有空白字符 - 标签:
perl -lape 's/[^\S\t]+//sg'
[ ... ]
定义了一个字符类
^
内的 [ ... ]
否定了这个字符类
\S
代表\s
\t
表示制表符
答案 3 :(得分:1)
使用awk,重新格式化输出以特别使用制表符,
awk -v OFS='\t' '{$1=$1}1' file
奇怪的$1=$1
强制要使用输出字段分隔符(选项卡)重写当前记录