sed 명령을 사용하여 첫 번째 패턴 발생을 찾아 추가합니다.

sed 명령을 사용하여 첫 번째 패턴 발생을 찾아 추가합니다.

다음과 같은 텍스트 파일이 있다고 가정합니다.

Hello world
types=""
Mario
types="Game"

내가 원하는 것은 단어가 처음 나타나는 것을 찾아 type=""해당 단어를 추가하는 것입니다.program

내가 원하는 출력:

Hello world
types="program"
Mario
types="Game"

Unix 쉘 스크립트에서 사용해야 합니다.

내가 시도한 것:

sed -i  '1,/types=\"\"/s/types=\"\"/types=\"program\"/' filename

이 명령은 삽입만 하고 추가하지는 않습니다. 추가를 시도했지만 a\여전히 작동하지 않습니다.

답변1

{   sed '/types=""/!b
        s/"/&program/;q'
    cat
}   <infile >outfile

POSIX는 sed입력 파일 오프셋을 입력 위치에 정확하게 유지합니다 q. 그러나 GNU의 경우 sed이 옵션이 필요할 수 있습니다 -u.

답변2

삽입을 사용한 i다음 d행을 삭제하고 q종료할 수 있습니다.

~$ sed '/types=""/{i\
> types="program"
> d;q}' f
Hello world
types="program"
Mario
types="Game"

다음은 작동하지 않습니다(@mikeserv에게 감사드립니다). 아니면 그냥 c줄을 변경하고 q종료하세요.

~$ sed '/types=""/{c\
> types="program"
> q}' f
Hello world
types="program"
Mario
types="Game"

(물론 -ifor 위치는 유지)

답변3

POSIX적으로:

$ sed -e '1,/types=""/{
  //s/"/&program/
}
' file

이상하게도 위의 내용은 GNU sed에서 실패합니다. 다음이 필요합니다.

$ sed -e '1,/types=""/{
  /types=""/s/"/&program/
}
' file

types=""첫 번째 줄에 나타나면 위의 모든 내용이 실패합니다. 이 경우 GNU sed 또는 BSD sed를 사용할 수 있습니다 0,/pattern/.

$ sed -e '0,/types=""/{                
  /types=""/s/"/&program/
}
' file

또는 POSIX 중 하나:

$ sed -e '/types=""/{
  s/"/&program/
  :1
  n
  b1
}
' file

또는 시청@mikeserv의 답변.

관련 정보