행을 단일 행으로 병합

행을 단일 행으로 병합

다음과 같은 파일이 있습니다.

< Dec 2, 2015 2:51:49 PM EST> <Error> <HTTP> <cphypprod1v..com> 
<AnalyticProviderServices0> <[ACTIVE] ExecuteThread: '3' for queue: 
'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel> <> <1449085909249> <BEA-

101017> <[ServletContext@462961596[app:bea_wls_deployment_internal 
module:bea_wls_deployment_internal.war path:/bea_wls_deployment_internal spec-

version:null]] Root  ServletException.

java.lang.OutOfMemoryError: GC overhead limit exceeded 

>

< Dec 2, 2015 2:51:49 PM EST> <Warning> <RMI> <cphypprod1v.sherwin.com>   <AnalyticProviderServices0> <[STANDBY] ExecuteThread: '8' for queue:   'weblogic.kernel.Default (self-tuning)'>  
<<WLS Kernel>> <> <> <1449085909264> < BEA-080003> < RuntimeException thrown by  
rmi server: javax.management.remote.rmi.RMIConnectionImpl.invoke 
(Ljavax.management.ObjectName;Ljava.lang.String;Ljava.rmi.Marshal 

>

다음과 같이 수정해야 합니다.

  < Dec 2, 2015 2:51:49 PM EST> <Error> <HTTP> <cphypprod1v..com> <AnalyticProviderServices0> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel> <><1449085909249> <BEA-101017> <[ServletContext@462961596[app:bea_wls_deployment_internal module:bea_wls_deployment_internal.war path:/bea_wls_deployment_internal spec-version:null]] Root  ServletException. java.lang.OutOfMemoryError: GC overhead limit exceeded  >

< Dec 2, 2015 2:51:49 PM EST> <Warning> <RMI> <cphypprod1v.sherwin.com>   <AnalyticProviderServices0> <[STANDBY] ExecuteThread: '8' for queue:   'weblogic.kernel.Default (self-tuning)'>  
<<WLS Kernel>> <> <> < 1449085909264> < BEA-080003> < RuntimeException thrown by  rmi server: javax.management.remote.rmi.RMIConnectionImpl.invoke (Ljavax.management.ObjectName;Ljava.lang.String;Ljava.rmi.Marshal >

<와 사이의 모든 내용은 >같은 줄에 있어야 합니다. 어떻게 해야 하나요?

답변1

그리고awk

awk 'BEGIN{RS=">\n+";ORS=">\n";FS="\n"} {$1=$1}1' yourfile
< Jan 20, 2016 11:58:09 AM EST  Test1 Sample Test1 >
< Jan 20, 2016 11:58:09 AM EST Sample Test It is not  T1 T2 >

각 출력 사이에 빈 줄을 원하면 추가로 빈 줄을 추가 할 수 있습니다 \n.ORS

awk 'BEGIN{RS=">\n+";ORS=">\n\n";FS="\n"} {$1=$1}1' yourfile

(이렇게 하면 파일 끝에 빈 줄이 추가될 수도 있습니다.)

답변2

당신을 위한:

(GNU sed)에 대한:

sed -e ':x' -e 'N' -e '$!bx' -e 's/\n/ /g' -e 's/ </\n</g' yourFile

(BSD sed)의 경우:

sed -e ':x' -e 'N' -e '$!bx' -e 's/\n/ /g' -e 's/ \</\'$'\n</g' yourFile 

이것이 내가 하는 방법이다:

  • 태그를 생성하여:x
  • 패턴 공간에 선 연결N
  • 생성된 태그( x명령의 첫 번째 태그) 로 분기하므로 $!bx마지막 개행을 유지해야 하므로 마지막 줄에 공백 관련 대체를 적용하지 않습니다.
  • 그런 다음 교체는 패턴 공간의 각 개행 문자를 공백()으로 바꿉니다.
  • <그런 다음 또 다른 교체는 모든 뒤에 공백을 개행 문자로 바꾸고 <.

답변3

실제로 다음을 제외하고 모든 개행 문자를 제거하려는 것처럼 보입니다 >.

perl -pe 's/(?<!>)\n//'

할 것입니다. (?<!...)운영자의 뒷모습이 부정적인 모습입니다. 따라서 \n가 선행되지 않는다는 것이 전제이다 >.

<...>일치하는 쌍 사이의 모든 줄 바꿈을 제거하려는 경우그리고, 새 예제에 따라 중첩될 수 있으며 더 복잡해질 수 있습니다.

perl -0777 -pe 's{<(?:(?0)|[^<>])*>}{$& =~ s/\n//gr}gse'

이는 Perl 정규식에서 재귀를 사용합니다( (?0)다시 전체 정규식 참조).

답변4

사용 하고 awk,pastesed

awk '/</{a=1}/>/{print;a=0}a' file | paste -d "" -s | sed 's/></>\n</g'

관련 정보