从文件中的列中删除逗号(如果它位于末尾)

从文件中的列中删除逗号(如果它位于末尾)

我有一个制表符分隔的文件,包含 19 列,其中一些列末尾包含逗号。我想从所有列中删除这些逗号(如果它位于末尾)。例子:

c1   c2   c3   c4   c5  
re,  f,f   d,f,  gf   mk
df   df,  df   dl,  df,

结果应该和保存在同一个文件中

c1   c2    c3    c4   c5  
re   f,f   d,f   gf   mk
df   df    df    dl   df

答案1

你可以这样做:

perl -i -pe 's/,(\t|$)/$1/g' file

这将删除所有逗号后跟空格、制表符或换行符。

对于其他字段分隔符,例如:,请使用:

perl -i -F: -lane 's/,$// for @F; print join ":",@F' file

这些命令将更改原始文件,先删除-i测试一下。

答案2

要删除每个字段末尾的单个逗号:

perl -i -pe 's/,(\t|$)/$1/g' myfile

(\t|$)匹配制表符或行尾。s/…/…/g将出现的每个模式(此处为,(\t|$))替换为给定的替换文本(此处为$1,表示模式中括号内的部分)。不以逗号结尾的字段与模式不匹配,因此它们会不加修改地打印出来。

-p选项指示 Perl 将给定的表达式应用于每个输入行并打印出修改后的行。这-i选项导致输入文件被结果输出替换。

答案3

这里有一些很棒的环视内容..

perl -i -pe 's/,(?=\t|$)//g' file

或者

perl -i -pe 's/,(?!\S)//g' file

或者

使用非字边界..

perl -i -pe 's/,\B//g' file

相关内容