내용이 다음과 같은 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