하나의 sed 명령에 몇 개의 표현식을 추가할 수 있습니까? [폐쇄]

하나의 sed 명령에 몇 개의 표현식을 추가할 수 있습니까? [폐쇄]

sed -e 'expression1' -e 'expression2' inputfile좋은 결과.

내 작업에서는 sed쉘 스크립트 내의 명령에 많은 표현식을 추가합니다. 그러나 이모티콘은 두 가지 색상으로 나뉩니다.

여기에 이미지 설명을 입력하세요.sed이를 처리하기 위해 명령에 몇 개의 표현식을 추가할 수 있습니까 sed?

답변1

  1. sed명령줄에 입력된(또는 셸 스크립트에 포함된) 스크립트의 길이는 셸에서 허용하는 최대 명령줄 길이(최신 셸의 경우 메가바이트)까지 가능합니다.

    도 있습니다아니요스크립트가 두 가지 이상의 작업을 수행하도록 하려면 -e해당 스크립트를 여러 번 사용해야 합니다. sed개행이나 세미콜론을 사용하여 여러 명령을 구분할 수 있습니다.

    예를 들면 다음과 같습니다.

    sed -e 's/foo/bar/' -e 's/abc/def/'
    

    넌 할 수있어:

    sed -e 's/foo/bar/; s/abc/def/'
    

    또는:

    sed -e 's/foo/bar
            s/abc/def'
    

    sh와 마찬가지로 명령문 사이의 추가 공백은 중요하지 않습니다. ;위의 첫 번째 예 뒤에는 공백을 사용했고, 두 번째 예에서는 가독성을 높이기 위해 들여쓰기에 더 많은 공백을 사용했습니다 .

    일부 sed명령은 가 아닌 줄 바꿈으로만 종료됩니다 ;. 이는 ;sed 명령 구분 기호 및 줄 바꿈의 일반 규칙에 대한 잘 문서화된 예외입니다. 자세한 내용은 참조https://www.gnu.org/software/sed/manual/html_node/Multiple-commands-syntax.html(이 문서는 모든/대부분의 버전에 적용됩니다 sed- GNU에 대한 비표준 확장은 언급될 때 언급됩니다).

    예를 들어, 특정 문자열 바로 뒤에 여러 줄의 텍스트를 추가하려는 경우 (append) 명령은 a개행 문자로만 끝날 수 있는 명령 중 하나입니다.sed

    /search-string-here/ a\
    text line 1 ; semicolons are just text\
    text line 2 ; and more text here\
    
    <more sed commands can go here>
    
  2. sed스크립트는 다음과 같습니다.어느sed스크립트를 파일에 넣고 각 명령을 줄 바꿈(또는 둘 다)으로 구분 하세요 sed. ;다음과 같이 실행하세요:

    sed -f scriptfilename ...
    

    sed다른 스크립팅 언어와 마찬가지로 독립형 스크립트를 작성할 수 있습니다 . 첫 번째 줄로 chmod +x만들면 #!/bin/sed -f실행 가능해질 수도 있습니다 .

    예를 들어:

    #!/bin/sed -f
    
    s/foo/bar/
    s/abc/def/
    
  3. sed단순한 "명령"이 아닌 스크립팅 언어입니다. 대부분의 사람들은 파이프라인에서 작고 간단한 정규식 대체 작업을 수행하기 위해 이 언어를 사용하지만 sed그 이상을 수행할 수 있습니다.

    man sed자세한 내용은 참조하십시오 . GNU는 sed또한 완전한 문서를 제공합니다텍사스 정보 네트워크체재. 실행 info sed하여 읽으세요(또는 뷰어가 설치되어 있는 pinfo sed경우 pinfo훨씬 우수합니다 info). 동일한 문서가 다음 사이트에서 다양한 형식으로 제공됩니다.https://www.gnu.org/software/sed/manual/.

답변2

명령줄의 최대 길이입니다. 명령줄 길이에 대한 제한은 셸이 아니라 운영 체제에 의해 적용됩니다. 이 제한은 일반적으로 수백 킬로바이트 범위입니다. POSIX는 이 제한 ARG_MAX를 나타내며 POSIX 호환 시스템에서는 다음을 사용하여 이를 쿼리할 수 있습니다.

$ getconf ARG_MAX    # Get argument limit in bytes

시험:

$ sed $(printf ' -e s/%s//g' $(seq 0001000000)) file

관련 정보