서버 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 정규식의 일부이므로 \
이전 ?
과 항목 을 추가하는 것을 잊지 마세요 .=