패턴 뒤에 파일에 줄을 추가하는 방법을 찾아야 하는데 패턴이 있는 줄을 편집하고 싶지 않습니다.
예를 들어 내 원본 파일은 다음과 같습니다.
group: misc
host: server1
job: internal
나는 그것을 다음과 같이 바꾸고 싶다.
group: misc
host: server1
role: webserver
job: internal
어려운 점은 "host:"를 일치시켜야 하지만 호스트 뒤의 이름이 매번 다르다는 것입니다. 나머지 줄을 존중하고 대신 "host:"가 발견되자마자 새 줄을 덤프하여 새 줄 뒤에 호스트 이름을 고아로 남겨두기 위해 sed를 얻는 방법을 찾지 못했습니다.
답변1
a
일치 후 텍스트 추가:
sed '/^host: /a\
role: webserver
' sample
또는 i
일치 항목 앞에 행을 삽입하십시오.
sed '/^job: /i\
role: webserver
' sample
답변2
비슷하다마커스의 대답, $
줄 끝( )을 개행 문자로 바꾸고 다음으로 시작하는 줄에 삽입하려는 줄을 바꿉니다 host:
.
$ sed '/host: / s/$/\nrole: webserver/ ' file
group: misc
host: server1
role: webserver
job: internal
이를 위해서는 오른쪽으로 GNU(또는 이를 지원하는 sed
다른 구현 )가 필요합니다. 위의 방법이 실패하면 다음을 시도하십시오.sed
\n
$ sed '/host: / s/$/\
role: webserver/' file
group: misc
host: server1
role: webserver
job: internal
답변3
.*
물론 이것은 매우 기본적인 정규식입니다.모든 것, 하나몇 번이라도;sed는 라인 기반이기 때문에 어쨌든 각 라인의 끝까지만 작동합니다.
따라서 완전한 GNU sed 호출은 다음과 같습니다.
sed 's/^host: .*$/&\nrole: webserver/'
답변4
사용sed
$ sed '/^host.*/{p;s//role: webserver/}' input_file
group: misc
host: server1
role: webserver
job: internal