我在文件中有以下内容。
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做到这一点?
答案 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可能更适合处理此
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