각 줄에서 특정 단어를 검색하고 나머지 줄을 인쇄하세요.

각 줄에서 특정 단어를 검색하고 나머지 줄을 인쇄하세요.

서버 URL이 포함된 텍스트 파일이 있습니다. 예를 들면 다음과 같습니다.

request get https://abc.net/search?q=hello/world/hello/word/search=5&size=10
request get https://abc.net/search?q=hello/world/hello/world/hello/word=5

이 텍스트 파일에서 "search?q=" 문자열 다음의 텍스트를 다른 파일인 출력 파일에 저장하고 싶습니다.

hello/world/hello/word/search=5&size=10
hello/world/hello/word/hello/world=5
hello1world1/hello/world/hello/word

답변1

sed -n '/search?q=/{s/.*search?q=//;p;}' infile > outfile

설명하다:

/search?q=/이 정규식을 포함하는 줄에만 적용할 수 있는 다음 명령 집합(중괄호)을 만듭니다.

s/.*search?q=//첫 번째 부분을 두 번째 부분(비어 있음)으로 교체합니다.

그런 다음 p라인을 인쇄하십시오.

-n플래그는 기본적으로 이 줄의 인쇄를 비활성화합니다.

실제로 다음과 같이 단순화할 수 있습니다.

sed -n '/.*search?q=/{s///;p;}' infile > outfile

명령에 입력한 패턴을 s/공백으로 두면 마지막에 사용한 패턴이 다시 사용되기 때문입니다.


편집: 댓글의 단순화를 지적한 RobertL에게 감사드립니다.

sed -n 's/.*search?q=//p' infile > outfile

이는 대체가 이루어질 때에만 해당 행을 인쇄하기 위해 명령 p의 플래그를 사용합니다.s

답변2

grep 버전이 PCRE를 지원하는 경우 다음과 같은 것을 사용할 수 있습니다.

grep -oP 'search\?q=\K.*' infile > outfile

답변3

Lookbehind의 Perl 기반 정규식 검색을 사용하면 필요한 결과를 얻을 수 있습니다.

grep -oP '(?<=search\?q\=)[^ ]*' *filename*

LookBehind 정규식의 일부이므로 \이전 ?과 항목 을 추가하는 것을 잊지 마세요 .=

관련 정보