sed 명령에서 -e의 목적은 무엇입니까?


41

sed -e간단한 교체를 위해 스위치에 대한 설명서를 찾을 수 없습니까?

예 :

sed 's/foo/bar/'

VS

sed -e 's/foo/bar/'

14
이것을 찾지 못 man sed하셨습니까?

4
당신은 potongs 설명을 찾을 수 없습니다, 왜 "cmd1; cmd2"을 사용하지 않아야합니까
사용자 불명

답변:


28

매뉴얼 페이지에서 :

-e script, --expression=script

    add the script to the commands to be executed

따라서 여러 -e옵션을 사용하여 여러 부분으로 스크립트를 작성할 수 있습니다 .

$ sed -e "s/foo/bar/" -e "/FOO/d"

먼저로 바꾸고 foobar포함하는 모든 줄을 삭제하십시오 FOO.


3
따라서 하나의 스크립트 만 있다면 '-e'가 필요하지 않습니다.
JohnyTex

나도 진정한 목적을 찾고있다-e
typelogic

27

이것은 당신을 위해 일할 수 있습니다 :

sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file

각각의 경우 i(삽입), a(첨부) 및 c(변경) 명령은 줄 바꿈으로 종료해야합니다.

일반적으로 명령은 ;예를 들어 분리하고 } 예를 들어 /foo/d;/bar/d그룹화 할 수 있지만 명령의 경우 명령 을 분리하는 방법을 제공합니다.{.../foo/{h;d}i,a,c-e

대안은 쉘 (bash)을 사용하여 개행을 삽입하는 것입니다.

sed '/foo/i\bar'$'\n''/fred/a\barney'$'\n''/harry/c\potter' file

1
적어도 일부 sed 구현 (예 : FreeBSD)에서는 -e세미콜론이 아닌 newlines /를 사용하여 레이블 및 분기 명령을 종료해야합니다 . 작동하지 않습니다 : sed ':a; /x/ { s/x/y/g; ba }; q' <<< "jxm". 그러나 이것은 :sed -e ':a' -e '/x/ { s/x/y/g; ba' -e '}; q' <<< "jxm"
dubiousjim

must be terminated with a newline문구가 여기 에서 얼마나 필요한지 잘 모르겠습니다 . 내 cygwin에서 여기에서 테스트하면 다음 과 같이 작동합니다 sed '/foo/i\bar' file. 이제 우리는 별도의 표현을 하나로 통합 할 수있게되었으므로 원래의 질문에 다시 제기됩니다 -e.
typelogic

1

-e--expression다른 Answer에 표시된 것처럼 여러 표현식을 함께 묶지 않는 경우 (일반적이지 않음)를 제외하고는 ,와 동등한 옵션은 선택 사항 입니다.

옆으로 : ;여러 표현식을 차례로 실행하기 위해 동일한 표현식에서 대신 사용할 수 있습니다.


0

도움에 대한 sed당신은 발견 할 것이다 -e플래그 스탠드을 위해 :

 -e script, --expression=script
                 add the script to the commands to be executed

그러나 당신은 마주 친 후 처음으로 혼동하지 않습니다 -e. 당신의 예에서 sed 's/foo/bar/'sed -e 's/foo/bar/'동일합니다. 두 경우 모두 s/foo/bar/는 IS 스크립트 나오지에 의해 실행된다. 두 번째 옵션은 더 명확하지만 아마도 자주 -e사용되는 이유는 아닙니다 . 그 이유 -e는 같은 호출로 두 개 이상의 스크립트를 사용할 수 있기 때문입니다 sed. 그래도 하나의 스크립트 만 사용하는 경우 왜 그것을 사용 하는가? 다음 예제는이를 설명 할 수 있습니다.

echo "foo" | sed -e 's/foo/bar/' -e 's/bar/foo'

"foo"를 출력합니다.

하나,

echo "foo" | sed 's/foo/bar/' -e 's/bar/foo'

sed첫 번째 s/foo/bar파일 이름으로 해석 하기 때문에 실패 합니다. 따라서 미래의 삶을 더 쉽게하기 위해 이미 -e깃발 을 사용할 수 있습니다. 그러면 앞으로를 사용하여 명령을 추가 스크립트로 추가 할 수 있습니다 -e <script>.

NB 다른 답변에서 ;여러 스크립트를 사용하는 대안으로 사용하는 것이 제안되었습니다. 어떤 경우에는 기술적으로 가능하지만 코드를 읽기가 매우 어렵 기 때문에 권장하지 않습니다. https://www.grymoire.com/Unix/Sed.html#uh-61 의 예를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.