2つのパターンの間にある行の1つと複数のファイルで文字列置換(変数値)を実行する方法

2つのパターンの間にある行の1つと複数のファイルで文字列置換(変数値)を実行する方法

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

関連情報