sed에서 명령 앞에 패턴을 바꾸는 용도는 무엇입니까?

sed에서 명령 앞에 패턴을 바꾸는 용도는 무엇입니까?

여기에 예가 있습니다.협회에 대한 sed:

"#"으로 시작하는 모든 줄의 첫 번째 숫자를 제거하려면 다음을 사용합니다.

sed '/^#/ s/[0-9][0-9]*//'

첫 번째 패턴()의 이점은 무엇입니까 /^#/? 간단히 말해서 다음과 같습니다.

sed 's/^#[0-9][0-9]*//'

답변1

명령의 일반적인 형식은 sed다음과 같습니다.

[address[,address]] function

명령에 단일 주소가 있으면 해당 주소와 일치하는 모든 행에서 작동합니다. 명령에 주소가 없으면 모든 행에서 실행됩니다.

인용하다:POSIXsed


귀하의 구체적인 예와 관련하여 :

  • /^#/ s/[0-9][0-9]*//

    • 명령에는 주소가 있으며 /^#/로 시작하는 모든 줄과 일치합니다 #.

    • 대체 패턴은 입니다 /[0-9][0-9]*/. 이는 행에 나타나는 첫 번째 숫자 순서와 일치합니다.

    • 일반 영어 요약: 로 시작하는 각 줄의 첫 번째 숫자 시퀀스를 제거합니다 #.

    • : # non-digits|5555|non-digits|5555이 되다# non-digits||non-digits|5555

  • s/^#[0-9][0-9]*//

    • 주소가 없으므로 명령은 각 라인에서 작동합니다.

    • 교체 패턴은 /^#[0-9][0-9]*/뒤에 오는 일련의 연속 숫자와 일치합니다.# 고정된줄의 시작 부분에.

    • 일반 영어 요약: #각 줄의 시작 부분에서 다음 숫자 시퀀스(및 해당 패턴만)를 제거합니다.

    • : #5555|non-digits|5555로 변경되지만 |non-digits|5555교체 # non-digits|5555|non-digits|5555패턴이 일치하지 않아 변경되지 않은 상태로 유지됩니다.

답변2

첫 번째 항목은 일치하고 대체됩니다.

#abc99

두 번째는 그렇지 않습니다.

또한 두 번째 항목도 원본을 삭제합니다 #.

관련 정보