다음과 같은 텍스트 파일이 있다고 가정합니다.
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"
(물론 -i
for 위치는 유지)
답변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의 답변.