운영 체제:커널 2.6.x
유용:비지박스 1.2x에서
명령은 여러 줄의 텍스트를 출력합니다.
string1 text1: "asdfs asdf adfas"
string2 text2: "iojksdfa kdfj adsfj;"
string3 text3: "skidslk sadfj"
string4 text4: "lkpird sdfd"
string5 text5: "alskjfdsd safsd"
표적:"text4:"(따옴표 제외)가 포함된 줄을 검색한 다음 해당 문자열 뒤의 모든 문자를 줄 끝까지 추출해야 합니다.
원하는 출력:"lkpird sdfd"(따옴표 포함)
현재 나는 ...
command | grep 'text4:' | awk -F': ' '{print $3}'
이것을 작성하는 더 쉬운 방법이 있습니까?
답변1
sed 사용
$ command | sed -n 's/.*text4://p'
"lkpird sdfd"
-n
명시적으로 요청하지 않는 한 인쇄하지 말라고 sed에 지시합니다. s/.*text4://
sed에게 줄의 처음부터 끝까지 모든 텍스트 항목을 삭제하도록 지시합니다 text4:
. 그러한 행이 발견되면 p
sed는 이를 인쇄하라는 지시를 받습니다.
사용grep -P
$ command | grep -oP '(?<=text4:).*'
"lkpird sdfd"
-o
일치하는 부분만 인쇄하도록 grep에 지시합니다. 다음 을 제외한 (?<=text4:).*
모든 텍스트와 일치합니다 .text4:
text4:
이 -P
옵션에는 GNU grep이 필요합니다. 따라서 busybox의 내장 명령이나 grep
BSD/Mac OSX 시스템의 기본 명령에서는 작동하지 않습니다.grep
awk를 사용하세요
원래 grep-awk 솔루션은 다음과 같이 단순화될 수 있습니다.
$ command | awk -F': ' '/text4: /{print $2}'
"lkpird sdfd"
awk 사용(대체)
$ command | awk '/text4:/{sub(/.*text4:/, ""); print}'
"lkpird sdfd"
/text4:/
포함된 행을 선택합니다 text4:
. sub(/.*text4:/, "")
행의 시작 부분부터 마지막 항목까지 모든 텍스트를 삭제하도록 awk에 지시합니다 text4:
. print
awk에게 이 줄을 인쇄하라고 지시하세요.
답변2
PCRE 지원 grep
및 \K
알림.
command |grep -Po 'text4: \K.*'