두 패턴 사이에 발생하는 줄 중 하나와 여러 파일에서 문자열 대체(변수 값)를 수행하는 방법

두 패턴 사이에 발생하는 줄 중 하나와 여러 파일에서 문자열 대체(변수 값)를 수행하는 방법

파일 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보류/가져오기 등 모든 요소를 ​​볼 수 있습니다 . 흥미로운 사양이 나오면 적응하려고 노력할 수도 있지만 이 예는 약간 건조합니다.

관련 정보