파일에서 단어를 찾아 그 아래 두 줄 아래에 텍스트를 삽입하려면 어떻게 해야 합니까?

파일에서 단어를 찾아 그 아래 두 줄 아래에 텍스트를 삽입하려면 어떻게 해야 합니까?

키워드를 찾아서 2줄 아래로 텍스트를 입력하고 싶은 파일이 있습니다.

예를 들어 내가 가지고 있는 파일에 다음 단어가 포함되어 있다고 가정해 보겠습니다.

the
cow
goes
moo

나는 "cow"라는 단어를 찾고 "yay"라는 텍스트를 파일의 cow라는 단어 아래 두 줄에 입력할 수 있기를 원합니다.

the
cow
goes
moo
yay

나는 이것이 완료될 것이라고 믿지만 sed작동시킬 수는 없습니다.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

$ cat ip.txt 
the
cow
goes
moo

$ sed '/cow/{N;N; s/$/\nyay/}' ip.txt 
the
cow
goes
moo
yay
  • N;N;다음 두 줄을 얻으십시오
  • s/$/\nyay/다른 줄 추가

답변2

와 함께 awk:

awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
  • /cow/cow레코드에서 일치하고 {print; getline; print; getline; print; print "yay"; next}그 줄을 인쇄하고 getline다음 줄을 가져옵니다. 그 줄도 인쇄되고 다음에도 동일하고 yay인쇄된 다음 다음 줄로 이동합니다( next)

  • 1(true) 나머지 줄을 기본 작업으로 인쇄합니다.

경고:

  • 검색할 패턴과 EOF 사이에 두 줄 미만이 있으면 패턴에서 시작하는 마지막 줄을 반복하여 그 사이에 두 줄을 만듭니다.

예:

% cat file.txt
the
cow
goes
moo

% awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1' file.txt
the
cow
goes
moo
yay

답변3

다른sed

sed '/cow/! b;n;n;a\yay' file.txt

다른

awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt

답변4

와 함께ed

ed file << EOF
/cow/+2a
yay
.
,p
q
EOF

수정된 출력을 인쇄합니다. 또는

ed file << EOF
/cow/+2a
yay
.
wq
EOF

또는 ( bash한 줄로)

printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file

변경 사항을 제자리에 기록합니다.

관련 정보