다음과 같은 파일이 있습니다.
asd 123 aaa wrqiqirw 123
123 itiewth 123 asno 123
123 132 123 123 123
boagii 123 asdnojaneoienton 123
예상되는 출력은 다음과 같습니다.
123
123
123
123
정규식을 통해 패턴을 검색해야 합니다. 이와 같은 것을 달성할 수 있는 방법이 있습니까?
답변1
그리고 pcregrep
다음과 같은 패턴을 가지고 있습니다 12*3
.
pcregrep -o1 '(12*3).*'
사용 pcregrep
또는 GNU grep -P
:
grep -Po '^.*?\K12*3'
( pcregrep
문자보다 더 많은 바이트로 작동하는 반면 GNU grep은 현재 로케일에 정의된 문자로 작동합니다(그리고 입력에 현재 로케일의 유효한 텍스트가 포함되어 있는지 확인해야 합니다)).
grep
패턴이 빈 문자열과 일치하면 GNU는 아무것도 인쇄하지 않는다는 점에 유의하세요.
답변2
Perl에서는 간단히
perl -lne 'print $& if /\d+/' inputfile
또는 표준 입력에서:
echo foo 123 bar 456 doo 789 | perl -lne 'print $& if /\d+/'
123
정규식은 \d+
연속 숫자 문자열과 일치하고 $&
일치하는 문자열을 인용합니다.
답변3
123
단 하나의 grep만으로도 각 줄에 일치 항목을 추가하는 데 충분합니다 .
게임이 첫 번째, 미드필더 또는 마지막인지는 중요하지 않습니다.
123을 요청하면 대기열에 있으면 123을 받게 됩니다(질문의 표현이 정확하지 않거나 다른 것이 필요한 경우 제외).
$ grep -wo '123' file # -w: word match -o : return only matched string instead of the whole line (default grep operation)
정규식을 사용하여 각 줄의 첫 번째 숫자(모든 숫자 - 모든 길이)를 캡처해야 하는 경우 다음과 같이 작업을 수행합니다.
cat <<EOF >file1
asd 111 777 aaa wrqiqirw 123
333 123 itiewth 123 asno 123
4444 111 123 123 567
boagii what 666 asdnojaneoienton 123
EOF
grep -Po '^[0-9]+|^.*?\K[0-9]+' file1
#output
111
333
4444
666
답변4
sed -e '
/\n/{P;d;}
s/12*3/\n&\n/;D
' < inoutfile