2017-11-03 16 views
2

grep -o 명령을 사용하여 패턴 만 인쇄하는 것으로 알고 있습니다.grep을 사용하여 전체 행의 패턴 만 인쇄하십시오.

<472971> <aaaaaaaaaaa> <bbbbbbbbb> <cccccc> <RUN> <AL_Ptime> <lsf_login07> </asdfghjklll/dsadasd/asda> 

내가 많이 시도하지만 난 정확하게 인쇄 할 수 있습니다 :

내가 < > 안에있는 모든 패턴을 인쇄 할
Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda> 

, 내 욕망의 출력은 다음과 같이 : 내가 이런 파일이 패턴 < >.

도움 주셔서 감사합니다.

답변

1

뭔가 grep -oE '<[^>]+>' 같은 :

$ echo "Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda>" \ 
| grep -oE '<[^>]+>' 
<472971> 
<aaaaaaaaaaa> 
<bbbbbbbbb> 
<cccccc> 
<RUN> 
<AL_Ptime> 
<lsf_login07> 
</asdfghjklll/dsadasd/asda> 

당신이 줄 바꿈을 제거 할 간단한 AWK이 같은에이 파이프, 당신이 할 수있는 사이에 공백이있는 경우 :

grep -oE '<[^>]+>' | awk '{printf "%s%s", (NR==1?"":" "), $0}' 

또는 tr :

grep -oE '<[^>]+>' | tr "\n" " " 

편집 : 그것을 사용

$ cat tst.awk 
BEGIN { FPAT="<[^>]+>" } 
{ for (i=1; i<=NF; i++) printf "%s%s", (i==1?"":" "), $i 
    printf "\n" 
} 

: 가정 해 영업 이익이 줄의 번호와 입력 파일을 사용하여, 하나는 GNU AWK로 전환 할 수

awk -f tst.awk file 

을 파일입니다 :

$ cat file 
Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda> 
Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda> 

또는 one-liner로 :

$ awk 'BEGIN{FPAT="<[^>]+>"} \ 
     {for (i=1; i<=NF; i++) printf "%s%s", (i==1?"":" "), $i; printf "\n"}' file 
<472971> <aaaaaaaaaaa> <bbbbbbbbb> <cccccc> <RUN> <AL_Ptime> <lsf_login07> </asdfghjklll/dsadasd/asda> 
<472971> <aaaaaaaaaaa> <bbbbbbbbb> <cccccc> <RUN> <AL_Ptime> <lsf_login07> </asdfghjklll/dsadasd/asda> 
+0

tks Marc it 's work. 그러나 나는 또 다른 문제가있다 나는 많은 작업을 포함하고있는 파일에서 많은 행을 가지고있다. 따라서 출력에는 많은 행이있을 것이므로 awk 명령이 잘 작동하지 않는다. 내 출력이 나의 욕망과 같은 많은 행을 가질 수 있는지 궁금하다. 산출? – Lucil120

+0

내 대답에 대한 해결책을 추가했습니다. –

+0

Marc awk 파일을 사용하는 경우 grep 명령을 사용해야합니까? 왜냐하면 출력 파일이 입력 파일처럼 보이기 때문에 awk 파일 만 사용하기 때문입니다. grep 명령을 사용한 후 해당 awk 파일의 입력 파일이 출력 파일입니까? 나는 둘 다 시도했으나 잘 작동하지 않는다. – Lucil120