다음 입력이 포함된 파일이 있습니다. 점으로 구분된 숫자는 주소를 나타냅니다. 주소의 모든 숫자는 아래와 같이 하나 이상의 숫자일 수 있습니다.
[112.112.112.112;3.3.3.3;44.44.44.44]
[6.6.6.6;17.17.17.17;88.88.88.88]
세미콜론과 괄호 없이 각 주소를 추출하고(주소는 세미콜론으로 구분됨 ;
) 새 파일의 한 줄에 각 주소를 삽입하여 다음 출력을 생성하고 싶습니다.
112.112.112.112
3.3.3.3
44.44.44.44
6.6.6.6
17.17.17.17
88.88.88.88
첫 번째 단계로 다음과 같이 주소를 추출하기 위해 grep을 시도합니다.
grep -E '\d+\.\d+\.\d+\.\d+' myfile.txt > newfile.txt
그러나 아무것도 인쇄되지 않습니다.
답변1
확장 정규식( -E
또는 egrep
) 모르겠어요 \d
. -P
@Alexander가 제안한 대로 -E
or [0-9]
를 사용하세요 [[:digit:]]
.
-o
전체 일치 행 대신 일치 항목만 선택 하도록 추가되었습니다 . 또한 개별 일치 항목을 새 행으로 나눕니다.
grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' myfile.txt
또는
grep -Eo '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+' myfile.txt
사용펄 정규식( -P
또는 pgrep
):
grep -Po '\d+\.\d+\.\d+\.\d+' myfile.txt
+
다음 으로 변경해 *
도 작동합니다 .기본 정규식:
grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' myfile.txt
답변2
-E
다음으로 바꾸고 -P
추가하세요 -o
.
grep -P -o '\d+\.\d+\.\d+\.\d+' myfile.txt
답변3
사용 awk
:
awk 'NF' RS='[][;]' infile
또는 tr
첫 번째 빈 줄이 마음에 들지 않으면 다음을 수행하십시오.
tr -s '];[' '\n' <infile
답변4
grep
작업에 약간 과잉입니다. tr
충분한:
$ < input.txt tr -d '[]' | tr ';' '\n' | sort -u
이 sort -u
섹션에서는 중복된 주소를 제거합니다.