파일의 특정 텍스트만 다른 파일로 복사

파일의 특정 텍스트만 다른 파일로 복사

내용이 다음과 같은 abc.txt 파일이 있습니다.

<classpathentry kind="src" path="Sources"/>
<classpathentry kind="con" path="WOFramework/ERExtensions"/>
<classpathentry kind="con" path="WOFramework/ERJars"/>
<classpathentry kind="con" path="WOFramework/ERPrototypes"/>
<classpathentry kind="con" path="WOFramework/JavaEOAccess"/>
<classpathentry kind="con" path="WOFramework/JavaEOControl"/>
<classpathentry kind="con" path="WOFramework/JavaFoundation"/>
<classpathentry kind="con" path="WOFramework/JavaJDBCAdaptor"/>

모든 경로를 다른 파일에 복사하고 싶습니다. 즉, 출력 텍스트 파일이 다음과 같기를 원합니다.

    WOFramework/ERExtensions
    WOFramework/ERJars
    WOFramework/ERPrototypes
    WOFramework/JavaEOAccess
    WOFramework/JavaEOControl
    WOFramework/JavaFoundation
    WOFramework/JavaJDBCAdaptor

답변1

파일이 동일한 패턴을 따른다고 가정합니다. 이 경우 다음 명령을 사용할 수 있습니다.

grep -o ' path=.*$' file.txt | cut -c8- |rev | cut -c 4- | rev

그래서 파일을 열고 cat문자만 추출한 다음 path=원하지 않는 문자를 제거한 다음 cut해당 rev기술을 사용하여 끝에서 원하지 않는 문자를 제거합니다.

또 다른 awk 방법

awk -F'path="' '{print $2}' file.txt |rev | cut -c 4- | rev

나는 path="구분 기호로 사용하고 그 뒤에 모든 정보를 인쇄합니다. 기본적으로 rev위와 동일한 작업을 수행합니다.

시험

cat file.txt
<classpathentry kind="src" path="Sources"/>
<classpathentry kind="con" path="WOFramework/ERExtensions"/>
<classpathentry kind="con" path="WOFramework/ERJars"/>
<classpathentry kind="con" path="WOFramework/ERPrototypes"/>
<classpathentry kind="con" path="WOFramework/JavaEOAccess"/>
<classpathentry kind="con" path="WOFramework/JavaEOControl"/>
<classpathentry kind="con" path="WOFramework/JavaFoundation"/>
<classpathentry kind="con" path="WOFramework/JavaJDBCAdaptor"/>

명령을 실행한 후,

Sources
WOFramework/ERExtensions
WOFramework/ERJars
WOFramework/ERPrototypes
WOFramework/JavaEOAccess
WOFramework/JavaEOControl
WOFramework/JavaFoundation
WOFramework/JavaJDBCAdaptor

Stephane은 댓글에서 더 나은 방법을 제공합니다.

cut -d '"' -f4 file.txt

답변2

간단한 방법 awk:

awk -F\" '/WOF/ {print $4}' abc.txt > outfile
  • -F\"필드 구분 기호를 기본값(공백)에서 따옴표(이스케이프 \) 로 변경
  • /WOF/각 레코드(파일 줄)에 대해 반환되는 결과를 패턴과 일치하는 결과로 제한합니다.WOF
  • $4일치하는 각 레코드의 네 번째 필드인 경로입니다.

답변3

grep 및 잘라내기를 수행하는 또 다른 방법:

grep "kind=\"con\"" sample.txt | cut -d \" -f 4 > sample_edited.txt

그러면 경로가 포함된 모든 줄이 grep되고 kind="con"의 구분 기호가 로 설정되어 경로가 인쇄됩니다.cut"

답변4

귀하의 버전이 PCRE 스타일 둘러보기를 지원하는 경우 grep또 다른 솔루션

grep -oP '(?<=kind="con" path=").+?(?="/>)' abc.txt

관련 정보