在行中删除两个符号之间的字符串

时间:2014-03-05 04:07:25

标签: linux sed awk command

我正在尝试从csv文件中删除两行符号之间的字符串。这是我的示例文件:

1.1.1.1,A-B:,awef.C.D.E
1.1.1.2,A-B:,few.C.D.E
1.1.1.3,A-B:,dfs.C.D
1.1.1.4,A-B:,few.C.D
1.1.1.5,A-B:,fdsferger.C.D.E
1.1.1.6,A-B:,wef.C.D
1.1.1.7,A-B:,jty.C.D.E

输出如下:

1.1.1.1,A-B:,C.D.E
1.1.1.2,A-B:,C.D.E
1.1.1.3,A-B:,C.D
1.1.1.4,A-B:,C.D
1.1.1.5,A-B:,C.D.E
1.1.1.6,A-B:,C.D
1.1.1.7,A-B:,C.D.E

我能以任何方式实现它吗?

4 个答案:

答案 0 :(得分:3)

以下awk命令可以执行此操作:

awk 'BEGIN{FS=OFS=","}{sub("[^.]*.","",$3);print}'

它基本上将每一行划分为三个以逗号分隔的字段,然后删除第三个字段的初始部分,直至并包括第一个.字符。

然后它再次输出它们。

请参阅以下成绩单进行演示:

pax> echo '1.1.1.1,A-B:,awef.C.D.E
1.1.1.2,A-B:,few.C.D.E
1.1.1.3,A-B:,dfs.C.D
1.1.1.4,A-B:,few.C.D
1.1.1.5,A-B:,fdsferger.C.D.E
1.1.1.6,A-B:,wef.C.D
1.1.1.7,A-B:,jty.C.D.E' | awk 'BEGIN{FS=OFS=","}{sub("[^.]*.","",$3);print}'

1.1.1.1,A-B:,C.D.E
1.1.1.2,A-B:,C.D.E
1.1.1.3,A-B:,C.D
1.1.1.4,A-B:,C.D
1.1.1.5,A-B:,C.D.E
1.1.1.6,A-B:,C.D
1.1.1.7,A-B:,C.D.E

答案 1 :(得分:2)

以下是应该执行的awk

awk '{sub(/:,[^.]*\./,":,")}1' file
1.1.1.1,A-B:,C.D.E
1.1.1.2,A-B:,C.D.E
1.1.1.3,A-B:,C.D
1.1.1.4,A-B:,C.D
1.1.1.5,A-B:,C.D.E
1.1.1.6,A-B:,C.D
1.1.1.7,A-B:,C.D.E

答案 2 :(得分:1)

你也可以使用sed

sed -r 's/(.*:,)([a-z]*.)(.*)/\1\3/g'

 (or)

sed -r 's/:,[^.]+\./:,/' file

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed 's/^\(.*,\)[^.]*\./\1/' file

使用贪婪收集除最后一列之外的所有列,然后删除最多并包含第一个.