sed删除并替换某些匹配

时间:2013-11-13 01:02:26

标签: regex bash unix sed

我在文件中有以下内容。

A 01/13/13 \\0101 \\0102 \\0103
C 04/19/13 \\0301 \\0302 \\0303 \\0304 \\0305
F 04/05/13 \\0602 \\0603 \\0604

我想将第一个\\替换为该行开头的字母和下划线。它总是一个字母。然后删除所有内容。如果有帮助的话,每行之间只有一个空格。

理想的结果应该是

A 01/13/13 A_0101
C 04/19/13 C_0301
F 04/05/13 F_0602

我尝试使用grep,我怎么能用sed做到这一点?

3 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是通过传递-r标志来启用扩展正则表达式。

sed -re 's/^(.) (\S+) \\\\(\S+).*$/\1 \2 \1_\3/' file

输出

A 01/13/13 A_0101
C 04/19/13 C_0301
F 04/05/13 F_0602

答案 1 :(得分:2)

可能更适合处理此

awk '{sub(/../, $1"_", $3); print($1, $2, $3)}' file.txt
A 01/13/13 A_0101
C 04/19/13 C_0301
F 04/05/13 F_0602

答案 2 :(得分:2)

你也可以像这样使用awk

awk '{sub(/\\\\/,x);print $1,$2,$1"_"$3}' file
A 01/13/13 A_0101
C 04/19/13 C_0301
F 04/05/13 F_0602