
다음과 같이 국가 이름과 해당 국가의 모바일 국가 코드 접두어가 포함된 파일이 있습니다.
United Kingdom +44 ...more fields
United States Virgin Islands +1 ...more fields
국가 이름과 모바일 접두어를 알아야 합니다. 따라서 정규식은 다음과 같습니다. 줄의 시작 부분부터 모든 단어를 읽은 다음 더하기와 하나 이상의 숫자로 시작하는 문자열을 읽은 다음 중지합니다.
grep, cut, 심지어 sed로 몇 가지를 시도했지만 얻을 수 없습니다.
답변1
다음을 시도해 보세요:
grep -o '^[^+]*+[0-9]\+' infile
[^+]*+
처음 +
발견될 때까지 모든 항목과 일치하고 그 뒤에 하나 이상의 숫자가옵니다.[0-9]\+
답변2
명령줄:
$ perl -lne 'print /^(.*?\+\d+)/' input.txt
그러면 입력에서 원하는 정보를 얻을 수 있습니다.
일하고 있는:
/^(.*?\+\d+)/
정규식은 더하기 기호가 처음 나타날 때까지 모든 것을 추출하고 그 뒤에 최소한 하나의 숫자 기호가 따라옵니다.BOL
이는 캐럿 기호를 통해 연결되므로^
분명히 한 번만 일치할 수 있습니다.- 일치하는 내용이 함수에 전달됩니다
print
. -lne
옵션은 input.file의 각 줄에 있는 옵션Perl
에 제공된 코드를 실행하는 것입니다 . Perl은 특별히 요청하지 않는 한 아무것도 인쇄하지 않도록 만듭니다.-e
-n
산출:
United Kingdom +44
United States Virgin Islands +1
답변3
부터당신은 말한다 공간파일에 사용되는 구분 기호입니다. 사용할 수 있어야 합니다.
cut -d ' ' -f 1-5 filename
파일에서 첫 번째 5개 열을 추출합니다.
주어진 데이터에 대해 이것은 다음을 생성합니다.
United Kingdom +44
United States Virgin Islands +1
...하지만 이름에 2개 이상의 단어가 있는 국가는 여러 분야(단지 2개가 아님)에 걸쳐 있기 때문에 이것은 단지 운이 좋다고 가정합니다.
sed
각 줄의 첫 번째 숫자 집합 뒤의 모든 항목(예: 국가 코드 뒤의 모든 항목)을 삭제하는 보다 강력한 방법 :
sed 's/\([[:digit:]][[:digit:]]*\).*/\1/' filename
또는,
sed 's/\([[:digit:]]\{1,\}\).*/\1/' filename
또는 -E
대신 확장 정규 표현식을 사용하면
sed -E 's/([[:digit:]]+).*/\1/' filename