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


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를 편집하고 input및 output줄을 표시하십시오 . 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.