使用awk / sed删除每行后的第三个逗号后的所有内容

时间:2016-07-12 12:04:19

标签: shell awk sed terminal

我有一个像这样的行的文件:

A, B, C, D, E

由此,我想获得:

A, B, C

我可以使用sed或awk吗?

4 个答案:

答案 0 :(得分:4)

是的,你可以:

 sed -r 's/([^,]+,)([^,]+,)([^,]+).*/\1\2\3/'

如果你想保留三个以上的字段,这些内容可能会更好:

sed -r 's/(([^,]+,){2}([^,]+)).*/\1/'

使用awk,您可以执行以下操作:

awk -v OFS=',' -F, '{NF=3; print}'

答案 1 :(得分:4)

awk -F, '$0=$1 FS $2 FS $3' file

应该做你想做的事。

答案 2 :(得分:1)

也许它不一样,但是删除第三个逗号之后的所有内容,是不是只打印.csv文件的前三个字段?如果是这样,你可以简单地做(类似于上面建议的那样):

echo A, B, C, D, E | awk -F, 'BEGIN { OFS = "," } {print $1,$2,$3}'

echo A, B, C, D, E | awk -F, '{print $1","$2","$3}'

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/,/\n/3;P;d' file

这将用换行符替换第三个逗号,然后打印到换行符并删除剩余的模式空间。