긴 sed 표현식을 여러 줄로 나누는 방법은 무엇입니까?

긴 sed 표현식을 여러 줄로 나누는 방법은 무엇입니까?
sed 's/[long1][long2]/[long3][long4]/' file.txt

이 명령을 다음과 같이 fx 여러 줄로 나누고 싶습니다.

sed 's/
    [long1]
    [long2]
  /
    [long3]
    [long4]
  /' file.txt

문자열을 분리하는 데 또는 를 사용 \하면 작동하지 않습니다.

답변1

sed 's'/\
'[long1]'\
'[long2]'\
'/'\
'[long3]'\
'[long4]'\
'/' file.txt

새 줄을 들여쓰지 않으면 백슬래시를 사용하여 여러 줄을 분할할 수 있습니다.

$ echo "a,b" | sed 's/\(.'\
> '\),\(.\)/\2-\1/'
b-a

GNU sed 4.2.2를 사용하여 Cygwin에서 테스트되었습니다.

답변2

반면에:

위 프로젝트는 얼마나 유지보수가 용이합니까 [long]?

조항을 더 짧고 명확하게 유지할수록 시간이 지남에 따라 조항을 변경하고 강화하기가 더 쉬워지고 해당 조항이 제공하는 기능에 대한 (sed-외부) 사실이 변경됩니다.

예를 들어

sed\
-e 's/[min-s1]/[min-r1]/' \
-e 's/[최소-s2]/[최소-r2]/' \
-e 's/[최소-s3]/[최소-r3]/' \
-e 's/[최소-s4]/[최소-r4]/'

...노력하고 즐길 가치가 있는 일이 될 수도 있습니다.

답변3

긴 문자열을 bash 변수에 저장한 다음 sed명령에서 사용할 수 있습니다.

string=[long1][long2]
replace=[long3][long4]
sed -e 's/'"$string"'/'"$replace"'/' file

다음 을 사용할 수 있는 경우 perl수정자로 긴 패턴을 끊을 수 있습니다 x.

perl -e 's/
[long1]
[long2]
/[long3][long4]/x' file

답변4

다음과 같이 분해할 수도 있습니다.

sed '/[long1][long2]/
    s//[long3][long4]/'

아니면 다음과 같을 수도 있습니다:

sed "$(
    printf 's/[%s][%s]/[%s][%s]/' \
        long1 \
        long2 \
        long3 \
        long4
)"

또는 구분 기호를 사용하세요.

sed -f - <<SED file.txt
s/\
[long1]\
[long2]\
/\
[long3]\
[long4]\
/
SED

관련 정보