파일 이름 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}
- f
true인 경우 라인을 다음으로 설정 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이 아닌 경우에만 인쇄하십시오.