쉘 스크립트를 사용하여 문자열을 여러 개행 문자에 닿는 문장이나 단락으로 바꾸려고 합니다. 대체 문자열은 런타임에 생성됩니다.
예를 들어:
sed /string_to_be_replaced/Replacement(newline character) string (newline character)/g
모든 의견/아이디어를 환영합니다. 감사해요!
답변1
GNU를 사용하세요 sed
.
mline="this is\na line\nin multiple\nlines"
sed "s/PATTERN/${mline}/g" <<<"PATTERN here."
this is
a line
in multiple
lines here.
입력에 /
특수 문자가 포함되어 있거나 &
다음과 일치하는 경우패턴 매칭존재하다 sed
. 전역 패턴 대체를 사용하여 //
모든 es를 바꾸거나 이스케이프 /
하고 모든 패턴을 \&
.
sed "s/PATTERN/${mline//\//\\/}/g; s/PATTERN/\&/" <<<"PATTERN here."
아니면 다른 sed
하위 사이트 구분 기호를 사용하고 &
다시 탈출하는 것이 더 좋습니다.
sed "s:PATTERN:${mline//&/\\&}:g" <<<"PATTERN here."
마지막으로 실제로 작동하도록 하려면 먼저 sed로 사용할 수 있도록 모든 Enter것을 교체해야 합니다 . 그래서\n
\\n
\n
실제 입력에서는 여러 줄을 입력합니다.
mline="th&is is
a line
in mul/tiple
line/s"
주문하다:
aline="$(sed -z 's:\n:\\n:g;$s:\\n$::' <<<"$mline")
sed "s:PATTERN:${aline//&/\\&}:g" <<<"PATTERN here."
출력은 다음과 같습니다
th&is is
a line
in mul/tiple
line/s here.