유닉스 쉘 명령을 사용하여 파일 중간에서 몇 줄을 인쇄하는 방법은 무엇입니까? [폐쇄]

유닉스 쉘 명령을 사용하여 파일 중간에서 몇 줄을 인쇄하는 방법은 무엇입니까? [폐쇄]

내 파일에는 다음 줄이 포함되어 있습니다.

$BQ  
{ VOL       @home    }  
database    daba  
relation    tcdeatid  
opendb  
clear    
.lruno := 72         <-- (This line lruno. := 72 has 10 times in my file1)
.infno := 1  
.tid.noel := 101       
writedb       
clear  
.lruno := 72  
.infno := 205  
.tid.noel := 191      
writedb       
clear    
$EOF

파일 2에서는 아래에 언급된 파일 1의 이 부분만 원합니다.

$BQ  
{ VOL       @home    }  
database    daba  
relation    tcdeatid  
opendb  
clear
.lruno := 72           
.infno := 1  
.tid.noel := 101  
.lruno := 72           
.infno := 205  
.tid.noel := 191
.lruno := 72           
.infno := 0  
.tid.noel := 1111  
.lruno := 72           
.infno := 56  
.tid.noel := 231
.lruno := 72           
.infno := 45  
.tid.noel := 61  
.lruno := 72           
.infno := 23  
.tid.noel := 901
.lruno := 72           
.infno := 123  
.tid.noel := 1611  
.lruno := 72           
.infno := 786  
.tid.noel := 81
.lruno := 72           
.infno := 55  
.tid.noel := 1  
.lruno := 72           
.infno := 253  
.tid.noel := 121
writedb       
clear  
$EOF

file1의 쉘 명령을 사용하여 이 코드 블록(lruno.:= 72)을 다른 파일에 넣고 싶습니다. 파일을 읽고 lruno의 수를 계산하는 명령을 원합니다. := 72 in file1이고 그 합계를 다른 파일에 씁니다.

답변1

sed 사용

.lruno := 72그러면 다음에서 시작하여 계속되는 행을 선택하여 clear요청한 출력이 생성됩니다 .

$ sed -n '/.lruno := 72/,/clear/p' file
.lruno := 72
.infno := 1
.tid.noel := 101
.tid.info := 64
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 101
.tid.info := 76
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear

작동 방식: -nsed에게 요청하지 않는 한 인쇄하지 말라고 지시합니다. 로 시작하고 끝나는 /.lruno := 72/,/clear/p모든 범위를 인쇄하도록 지시합니다 ..lruno := 72clear

awk를 사용하세요

awk를 사용하여 동일한 접근 방식을 사용할 수도 있습니다.

awk '/.lruno := 72/,/clear/' file

sed와 마찬가지로 로 /.lruno := 72/,/clear/시작하고 끝나는 줄 그룹이 선택됩니다. 선택한 행에 대해 지정된 작업이 없으므로 awk는 이를 인쇄하는 기본 작업을 수행합니다..lruno := 72clear

답변2

사용 sed:

< inputfile sed '1,6d; $d' > outputfile
  • < inputfile: 콘텐츠를 's' inputfile로 리디렉션합니다.sedstdin
  • > outputfilesed:컨텐츠를 stdout다음으로 리디렉션합니다.outputfile
  • 1,6d: 첫 번째 줄부터 여섯 번째 줄까지 모두 삭제
  • $d: 마지막 줄 삭제

예제 출력:

~/tmp$ cat inputfile
$BQ
{ VOL @home }
database daba
relation tcdeatid
opendb
clear
.lruno := 72
.infno := 1
.tid.noel := 101
.tid.info := 64
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 101
.tid.info := 76
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 2
.tid.noel := 100
.tid.info := 34
.tid.setnr := 125
.typeidm := 9
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 25
.tid.noel := 1101
.tid.info := 71
.tid.setnr := 1425
.typeidm := 1
.sourcetable := 3
writedb
clear
$EOF
~/tmp$ < inputfile sed '1,6d; $d'
.lruno := 72
.infno := 1
.tid.noel := 101
.tid.info := 64
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 101
.tid.info := 76
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 2
.tid.noel := 100
.tid.info := 34
.tid.setnr := 125
.typeidm := 9
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 25
.tid.noel := 1101
.tid.info := 71
.tid.setnr := 1425
.typeidm := 1
.sourcetable := 3
writedb
clear
~/tmp$ 

관련 정보