파일에서 특정 문자열 뒤에 텍스트를 삽입하는 방법은 무엇입니까?


69

지금 echo "Hello World" >> file.txt은 파일에 일부 텍스트를 추가 하는 데 사용 하고 있지만 특정 문자열 아래에 "[option]"이라고하는 텍스트를 추가해야 sed합니까?

EG :

입력 파일

Some text
Random
[option]
Some stuff

결과물 파일

Some text
Random
[option]
*inserted text*
Some stuff

1
보다 구체적이고 사람들이 정확한 명령을 수행 할 수 있도록 샘플 텍스트를 제공해야합니다.
clement

Q를 편집하고 inputoutput줄을 표시하십시오 . Q가 확실하지 않기 때문입니다. 당신은 또한 할 수 echo "Hello World [option]" >> file.txt있지만 말이되지 않습니다.

참고 용으로 추가 정보를 제공하기 위해 질문을 편집했지만 허용 된 답변은 내가 달성하려는 것입니다.
Javier Villanueva

설정 파일편집하고 싶다면 이것이 내가 찾은 최고의 솔루션입니다 : unix.stackexchange.com/a/78076/20661
rubo77

답변:


104

경기 후 줄 추가

  • sed '/\[option\]/a Hello World' input

경기 전 줄 삽입

  • sed '/\[option\]/i Hello World' input

또한 -i.bkpsed 옵션을 사용하여 백업 및 편집 입력 파일을 제자리에서 수행 할 수 있습니다


2
osx에서 내가 얻는sed: 1: "/pattern/a some text here": command a expects \ followed by text
the_prole


Mac OSX의 경우, 옵션 \ <<NEWLINE>>후에 추가해야했습니다a
Tom Howard

위의 코드는 모든 단일 일치에 대한 행을 추가 / 삽입합니다. 첫 번째 일치에 대해서만 행을 추가 / 삽입하려는 경우 다음 0,명령 앞에 추가 할 수 있습니다 . sed '0,/\[option\]/a Hello World' input또는sed '0,/\[option\]/i Hello World' input
kimbaudi

33

예, 가능합니다 sed:

sed '/pattern/a some text here' filename

예를 들면 :

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$

2
@ javiervd 나는 당신이 첫 번째 대답의 의미를 잘 모르겠습니까? 당신이 대답 할 때까지 먼저 의미했다면, 당신은 틀 렸습니다. 타임 스탬프를주의 깊게 관찰하지 않았습니다!
devnull

최신 문자열이 일치 한 후에 추가하는 방법이 있습니까? 예를 들면 다음과 같습니다 foo bar option bar option baz .. 그래서 패턴은 foo bar option bar option addedstring baz ?
Ari

4

awk:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

일부 문자는 문자 그대로 포함될 수 없으므로 이스케이프 시퀀스 (백 슬래시로 시작) 를 사용해야 합니다 (예 : 리터럴 백 슬래시 인쇄) \\.

실제로는 동일 sed하지만 텍스트에 포함 된 각 줄 바꿈 앞에는 백 슬래시가 와야합니다.

sed '/PATTERN/a\
add one line\
\\and one more' infile

이스케이프 시퀀스에 대한 자세한 내용은 설명서를 참조하십시오.


awk 줄은 실제로 텍스트를 변경하지 않고 출력 만합니다.
Josef Klimuk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.