파일의 다음 항목을 모두 출력으로 인쇄하려고 합니다. 예상되는 출력은 다음과 같습니다(IP 주소가 다름).
all files calculateTotalcount 0 #211.4.2.10#expctd data flows
all files calculateTotalcount 0 #21.2.2.110#expctd data flows
all files calculateTotalcount 0 #11.44.2.10#expctd data flows
all files calculateTotalcount 0 #1.54.8.10#expctd data flows
내 문자열에는 공백이 있고 IP 주소가 있으므로 다음 형식으로 grep을 작성했습니다.
grep -o -E 'all files calculateTotalcount 0 #[0-9]*'#expctd data flows' inputfile > output file
나는 이것이 IP 주소가 아닌 숫자로만 작동한다고 생각합니다. 어떤 수정 사항을 제안할 수 있나요?
답변1
[0-9]*
0부터 9까지 순서대로 0개 이상의 문자와 일치합니다(최소 0123456789 포함). 대괄호 표현식과 일치하는 문자 목록에 추가하려면 .
as를 추가 할 수 있습니다 .[0-9.]*
.
grep -Eo 'all files calculateTotalcount 0 #[0-9.]*#expctd data flows'
또는 IPv4 주소의 4차 표현만 일치시키려는 경우에는 다음과 같이 더 구체적으로 지정할 수 있습니다.
grep -Eo 'all files calculateTotalcount 0 #([0-9]+\.){3}[0-9]+#expctd data flows'
또는 덜 구체적으로 원하는 [^#]*
수의 문자(0 포함) ( 한 번에 한 줄씩 일치하므로 #
개행 문자 포함)를 지정하여 IPv4 주소나 IPv6 주소 또는 호스트 이름의 다른 표현을 허용할 수 있습니다.grep