文件1.txt
ABC123DEF
START
A
B
C=??
D
END
UVZ789XYZ
START
A
B
C=??
D
END
预期输出是
ABC123DEF
START
A
B
C=123
D
END
UVZ789XYZ
START
A
B
C=789
D
END
如何使用“sed”/“awk”/“tcl”/“vim”做到这一点?
答案1
这
G
/^(.).*\n\1/ { P; d }
s/^(.)(.*)\n.*/\1\n\1\2/
p
s/^(.)\n.*/\1/
h
是一个可以作为灵感的 sed 程序。它这样做:
]# cat infile
alpha
and
alas
arc
fat
foo
zoo
boat
bee
bed
]# ./letter-group.sed infile
a
alpha
and
alas
arc
f
fat
foo
z
zoo
b
boat
bee
bed
它需要一些改变,但我认为基本思想可以重用。info sed
了解详情。
#!/bin/sed -Enf
# Insert a title line (group header) when first letter changes
#
#
# If first letter stays the same, just print input line and exit
#
G
/^(.).*\n\1/ { P; d }
# new letter: move it to first line, and print
#
s/^(.)(.*)\n.*/\1\n\1\2/
p
# hold the new letter
s/^(.)\n.*/\1/
h
在这里您可以看到所有这些元素:s///
、\1
和hold/get。如果您提出一些有趣的规范,我可能会尝试适应,但这个示例有点干燥。