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

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

지금 나는 사용하고 있어요

echo "Hello World" >> file.txt

[option]파일에 일부 텍스트를 추가하는 것이 가능 하지만 특정 문자열 아래에 텍스트를 추가해야 합니까 sed?

예를 들어:

입력 파일

Some text
Random
[option]
Some stuff

결과물 파일

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

답변1

일치 후 행 추가

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

일치 앞에 행 삽입

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

-i.bkp또한 sed 옵션을 사용하여 입력 파일을 내부에서 백업하고 편집할 수 있습니다.

답변2

예, 다음을 사용할 수 있습니다 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
$

답변3

그리고 awk:

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

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

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

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

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


또한 일부 의견을 해결하기 위해 위 명령은 파일을 내부에서 편집하지 않고 결과를 표준 출력으로 인쇄합니다. 입력 파일을 실제로 수정하려면 스위치를 사용하거나(매뉴얼 확인) 지원하는 경우 스위치를 사용 하거나 임시 파일로 리디렉션한 다음 원본 파일을 덮어쓸 수 있습니다 -i.awksed

cmd infile > outfile
mv outfile infile

또는 ed/를 사용하여 ex모든 플랫폼에 있는 파일을 편집합니다.

ex -s infile <<\IN
/PATTERN/a
add one line
and one more
.
w
q
IN

기억하세요: ed추가 및 삽입에는 //를 사용하고, 끝으로 이동하려면 를 사용하여 삽입하세요.sedexaiawk1

답변4

이는 이 유틸리티를 사용하여 달성할 수도 있습니다 ed. 를 사용하는 것이 더 쉽지만 sed추가 유틸리티에 익숙해지는 것이 좋습니다. (저는 특별히 ed를 사용하여 이 작업을 수행하는 방법을 찾기 위해 이 페이지를 방문했습니다. 저는 이미 sed에서 이 작업을 수행하는 방법을 알고 있습니다.)

예제 파일의 경우(참조용으로 인쇄된 줄 번호):

 1  Some text
 2  Random
 3  [option]
 4  Some stuff

제안된 출력을 얻기 위한 명령은 다음 ed과 같습니다.

4i
*inserted text*
.
w
q

설명하다:

  1. 4행으로 이동하여 삽입 모드를 시작합니다. (i)
  2. 다음에 추가*텍스트 삽입*(개행 포함)
  3. 삽입 모드 종료(.)
  4. 파일(w)에 쓰고 종료 ed(q)

하나의 명령을 사용하여 이 모든 것을 하나로 묶을 수 있습니다여기에 있는 문자열:

ed filename.txt <<< '4i
*inserted text*
.
w
q
'

관련 정보