파일에서 단어를 찾아 그 아래에 두 줄의 텍스트를 삽입하는 방법은 무엇입니까?

파일에서 단어를 찾아 그 아래에 두 줄의 텍스트를 삽입하는 방법은 무엇입니까?

키워드를 찾고 아래에 두 줄의 텍스트를 입력하려는 파일이 있습니다.

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

the
cow
goes
moo

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

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

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

관련 정보