删除以逗号分隔的特定字段中的所有空格

删除以逗号分隔的特定字段中的所有空格

输入:

11 22 33 44,1 2,2

输出

11223344,1 2,2

我希望删除字段 number 中的所有空格1,该字段位于第一个字段之前comma

答案1

使用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匹配在上一个匹配之后的那个位置,因此在最后一个替换的空格之后,以及在循环的第一遍中,在行的开头。当我们使用时,[^,]我们不允许循环超过第一个逗号,因此仅替换它之前的所有空格。

相关内容