새 줄을 생성하는 Sed 스크립트 파일

새 줄을 생성하는 Sed 스크립트 파일

이것은 쉬울 것이지만 sed -f가 어떻게 작동하는지 분명히 이해하지 못합니다.

txt 파일 bar.txt로 시작합니다.

set_expand [get_it -marker \*spam*]

나는 출력을 다음과 같이 원한다:

{Line1:# EXPAND ####\n############\n#{print set_expand [get_it -marker \*spam*]\n###
Line2:set_expand [foo\*spam*]"}

내가 말했듯이, 연속적인 기능을 실행하는 것은 "그냥"이기 때문에 이것이 쉬울 것이라고 생각했습니다.

sed -e 's/\(^set_expand[^\n]*$\)/{Line1:# EXPAND ####\\n############\\n#{print \1\\n###\nLine2:\1"}/g' bar.txt >tmp.txt
sed -e '/^[{]/\!{s/get_it -marker[[:blank:]]*\(.*\)$/foo\1/g}' tmp.txt

원하는 출력을 생성합니다.

{Line1:# EXPAND ####\n############\n#{print set_expand [get_it -marker *spam*]\n###
Line2:set_expand [foo*spam*]"}

그러나 sed -f를 사용하여 스크립트에 넣으면 두 번째 줄을 건너뜁니다. 이것은 내 .sed 파일입니다. create_awk.sed

s/\(^set_expand[^\n]*$\)/{Line1:# EXPAND ####\\n############\\n#{print \1\\n###\nLine2:\1"}/g
/^[{]/!{s/get_it -marker[[:blank:]]*\(.*\)$/foo\1/g}

라인 2의 출력이 누락되어 대체되었습니다.

sed -f create_awk.sed bar.txt
{Line1:# EXPAND ####\n############\n#{print set_expand [get_it -marker *spam*]\n###
Line2:set_expand [get_it -marker *spam*]"}

문제는 .sed 파일의 첫 번째 줄이 두 번째 버퍼가 작동할 모드 버퍼로 들어 가지 않는 추가 줄을 생성한다는 것입니다.

관련 정보