키워드를 찾고 아래에 두 줄의 텍스트를 입력하려는 파일이 있습니다.
예를 들어, 내 파일에 다음 단어가 포함되어 있다고 가정해 보겠습니다.
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
변경 사항을 제자리에 기록합니다.