![정규식: n 문자 다음에 n 문자를 한 번만 일치시킵니다.](https://linux55.com/image/181489/%EC%A0%95%EA%B7%9C%EC%8B%9D%3A%20n%20%EB%AC%B8%EC%9E%90%20%EB%8B%A4%EC%9D%8C%EC%97%90%20n%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%ED%95%9C%20%EB%B2%88%EB%A7%8C%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%B5%EB%8B%88%EB%8B%A4..png)
나는 어떤 문자가 56번 나온 후 11번이나 일치하는 정규식을 찾고 있습니다.
예:
this is a long formatted line with any char. 56 timesmatchI wantNothingShouldMatchHere
내가 원하는 것은:
matchI want
내가 시도한 것:
(?<=.{56}).{11}
하지만 이는
matchI want
ANDNothingShou
AND 와 일치합니다ldMatchHere
.이것:
(?<=.{56}).{11}?
동일한 결과가 생성됩니다.
도와주셔서 감사합니다!
re
참고: 제 경우에는 이 정규식은 Python 모듈과 함께 사용하기 위한 것입니다.
답변1
답변2
sed -E 's/.{56}(.{11}).*/\1/'
Sed의 아이디어는 전체 줄을 일치시키고 필요한 11자만 캡처하는 것입니다. 그들은 내부에 캡처 ()
되고 전체 라인이 그룹으로 대체됩니다. 바라보다패턴의 일부를 보존하려면 \1을 사용하세요.더 자세한 설명을 원하시면.
최소 56+11=67자를 포함하지 않는 행을 무시하려면 다음을 사용하십시오.
sed -nE 's/.{56}(.{11}).*/\1/p' file
답변3
사용진주
~$ perl -ne 'print $&."\n" if /(?<=^.{56}).{11}/;' file
#OR
~$ perl -ne 'print $1."\n" if /(?<=^.{56})(.{11})/;' file
사용행복하다(이전의 Perl6)
~$ raku -ne 'put $/ if /<?after ^.**56> .**11 /;' file
#OR
~$ raku -ne 'put $0 if /<?after ^ .**56> (.**11)/;' file
모든 예제는 matchI want
OP의 예제 입력에서 반환됩니다.
https://perldoc.perl.org/perlre
https://docs.raku.org/언어/regexes