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


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

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

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

\문자열을 사용 하거나 분리하지 못했습니다.



이것이 Perl이 /x대체 할 수정자를 갖는 이유 입니다.
choroba

1
@Networker : 예, 감사합니다. 저의 답변도 추가했습니다.
Raffael

답변:


8

긴 문자열을 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

1
왜 이렇게 많은 따옴표를 사용합니까? sed "s/$string/$replace/" file.txt괜찮습니다.
Scott

1
또한, 뒤에 공백을 삭제해야합니다 replace=.
Scott

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

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

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

GNU sed 4.2.2를 사용하여 Cygwin에서 테스트


sed 버전은 무엇입니까? 나는 함께 테스트하고 GNU sed version 4.2.1작동하지 않습니다.
cuonglm

2
첫 줄 끝에 백 슬래시가없는 것 같습니다.
Volker Siegel

7

또 다른 측면 :

[long]위 항목 은 얼마나 관리가 용이 합니까?

조항을 더 짧고 명확하게 유지할수록 시간이 지남에 따라 조항이 변경되고 향상되고 제공되는 기능에 따라 (sed-external) 사실이 변경 될 수 있습니다.

예 :

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

... 노력하고 선호하는 것일 수 있습니다.


4

이 방법으로 분리 할 수도 있습니다.

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

또는 아마도 :

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

또는 heredoc과 함께 :

sed -f - <<SED file.txt
s/\
[long1]\
[long2]\
/\
[long3]\
[long4]\
/
SED
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.