단어를 찾아 다음 두 번째 줄 단어만 바꾸는 방법

단어를 찾아 다음 두 번째 줄 단어만 바꾸는 방법

파일 이름 Staff.txt 및 샘플 콘텐츠는 다음과 같습니다.

JHON
MANAGER
10000

JHON파일에서 찾고 싶고 해당 줄 다음의 두 번째 줄 내용을 다른 단어/번호로 변경하고 싶습니다.

어떻게 해야 하나요?

답변1

에드를 사용하세요!

ed -s staff.txt <<< $'/JHON/+2s/.*/4242\nw\nq'

-s이는 파일의 스크립트 모드( )에서 ed를 호출 staff.txt하고 여기에 인용된 ANSI 문자열로 다음 명령을 보냅니다.

  • ( )를 포함하는 줄 JHON과 해당 줄 너머의 두 줄을 찾습니다.+2
  • .*해당 줄에서 ( ) 안의 모든 항목을 검색하여 바꿉니다.4242
  • w디스크에 파일 쓰기
  • q그것에 의해 편집됨

중간에 있는 것은 \n다른 ed명령을 구분합니다.

또는 다음 c을 사용하여 줄을 변경할 수 있습니다.

ed -s staff.txt <<< $'/JHON/+2c\n4242\n.\nw\nq'

여기서 대체 텍스트는 c마침표( \.\n)로 끝나는(명령어 뒤) 별도로 입력해야 합니다.

답변2

sed다음을 사용하여 다음 줄로 이동할 수 있습니다 n.

sed '/JHON/{n;n;s/.*/42/}'

답변3

사용 awk:

awk 'f{$0="newvalue";f=0}/JHON/{print;getline;f=1}1'

f{$0="newvalue";f=0}- ftrue인 경우 라인을 다음으로 설정 newvalue하고 다음 f으로 재설정합니다.0

/JHON/{print;getline;f=1}- JHON패턴이 발견되면 인쇄하고 다음 줄을 인쇄하고 f다음으로 설정합니다.1

1- 인쇄

답변4

한 명(등록자 한 명)만 있는 경우 다음 코드를 사용할 수 있습니다.

awk '/JHON/{print $0; getline; print "SUPERVISOR"; getline; print "99999"; }' staff.txt

staff.txt파일에 사람이 많고(레지스터도 많음) JHON 데이터만 바꿔야 하는 경우 :

awk '/.*/{if($0=="JHON"){print $0; getline; print "SUPERVISOR"; getline; print "99999"; } else {print $0;}}' staff2.txt

staff2.txt:

JHON
MANAGER
10000
ROGER
TEACHER
3000
ROBERT
SCIENTIST
20000

다음과 같은 결과가 출력되어야 합니다.

JHON
SUPERVISOR
99999
ROGER
TEACHER
3000
ROBERT
SCIENTIST
20000

동일한 출력을 얻는 또 다른 간단한 방법은 다음과 같습니다.

awk '/JHON/{print;getline; print "SUPERVISOR"; getline; $0="99999"}1' staff2.txt

설명: 줄이 JHON이면 JHON을 인쇄하고 다음 줄로 이동하여 SUPERVISOR를 인쇄하고 다음 줄로 이동하여 99999로 바꿉니다. 행이 JHON이 아닌 경우에만 인쇄하십시오.

관련 정보