![sed를 사용하여 텍스트를 추출하는 방법](https://linux55.com/image/61985/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%B6%94%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
텍스트 파일이 있는데 sed
.
예를 들어 다음 줄에서는 다음과 같습니다.
string>![TEST[Extract this string]>/string>
난 갖길 원해
Extract this string
이것을 어떻게 달성할 것인가 sed
? 기본적으로 string>![TEST[
" "라는 표현으로 시작하고 ]>/string>
" "라는 표현으로 끝나는 텍스트를 얻고 싶습니다 .
답변1
sed -e 's/string>!\[TEST\[\(.*\)]>\/string>/\1/' file
또는
sed -e 's|string>!\[TEST\[\(.*\)]>/string>|\1|' file
산출:
이 문자열을 추출하세요
답변2
문자열에 무엇을 일치시켜야 하는지 알려줄 뿐만 아니라 문자열에 무엇을 보관해야 하는지도 알려 주어야 합니다.
sed -ne 's@string>!\[TEST\[\([^]]*\)\]>/string>@\1@gp'
s
in 명령은 sed
정규식과 대체 문자열이라는 두 가지 매개변수를 사용합니다. 일반적으로 /
구분 기호는 둘을 구분하는 데 사용되지만 이 경우에는 어떤 문자든 사용할 수 있습니다 @
. 정규식에는 , 와 같은 특수 문자가 있습니다 [
. 실제 문자를 원할 경우 를 사용하여 이러한 문자를 인용해야 합니다(예: ) . 대괄호 사이의 모든 내용을 캡처합니다 . 그리고 문자열을 정규식과 일치하는 문자열로 바꿉니다. 마지막으로 , send는 행( )에서 여러 일치 항목을 수행하고 대체된 행을 인쇄하도록 지시합니다 ( 옵션을 사용하여 행을 인쇄하지 않도록 지시한 후 ).]
\
string>!\[
\([^]]*\)
\1
@gp
g
sed
-n
답변3
Awk를 사용하는 간단한 방법:
awk -F'[][]' '{print $3}' file
답변4
GNU를 통해 grep
,
$ echo 'string>![TEST[Extract this string]>/string> foo bar string>![TEST[Extract this string]>/string>' | grep -oP 'string>!\[TEST\[\K.*?(?=]>/string>)'
Extract this string
Extract this string