ファイル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
保留/インポートなど、すべての要素を見ることができます。興味深い仕様が出たら適応しようとするかもしれませんが、この例は少し乾燥しています。