1

我在一个文件中有以下内容。

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 来做到这一点?

4

3 回答 3

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
于 2013-11-13T01:09:18.017 回答
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
于 2013-11-13T06:29:48.807 回答
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
于 2013-11-13T01:07:43.507 回答