αԋɱҽԃ αмєяιcαη Asked: 2018-10-08 13:05:30 +0800 CST2018-10-08 13:05:30 +0800 CST 2018-10-08 13:05:30 +0800 CST 从以逗号分隔的特定字段中删除所有空格 772 输入: 11 22 33 44,1 2,2 输出 11223344,1 2,2 我正在寻找删除字段 number 中的所有空格1,它在第一个之前comma。 awk sed 1 个回答 Voted Best Answer Stéphane Chazelas 2018-10-08T13:28:50+08:002018-10-08T13:28:50+08:00 使用sed,您要么需要一个循环: sed -e :1 -e 's/^\([^,]*\) /\1/;t1' 或者使用保持空间以便能够替换所有空格,然后从那里恢复行的原始部分: sed 'h;s/,.*//;s/ //g;G;s/\n[^,]*//' 它更容易awk: awk -F, -v OFS=, '{gsub(" ", "", $1); print}' 或者perl: perl -F, -lpe '$F[0] =~ s/ //g; $_ = join ",", @F' 或者: perl -pe 's{[^,]*}{$& =~ s/ //gr}e' 或者: perl -pe 's/\G[^, ]*\K //g' 最后一个可能值得解释:\G与g国旗一起。 g标志意味着局部替换,g并暗示一个循环,perl在前一个事件之后立即继续搜索下一个事件。 \G在上一场比赛之后的那个地方匹配,所以在最后一个替换的空间之后,在循环的第一遍,在行的开头。当我们使用[^,]时,我们不允许循环超过第一个逗号,所以只替换它之前的所有空格。
使用
sed
,您要么需要一个循环:或者使用保持空间以便能够替换所有空格,然后从那里恢复行的原始部分:
它更容易
awk
:或者
perl
:或者:
或者:
最后一个可能值得解释:
\G
与g
国旗一起。g
标志意味着局部替换,g
并暗示一个循环,perl
在前一个事件之后立即继续搜索下一个事件。\G
在上一场比赛之后的那个地方匹配,所以在最后一个替换的空间之后,在循环的第一遍,在行的开头。当我们使用[^,]
时,我们不允许循环超过第一个逗号,所以只替换它之前的所有空格。