programing

경기 전후의 Grep 문자?

muds 2023. 4. 26. 23:48
반응형

경기 전후의 Grep 문자?

사용 방법:

grep -A1 -B1 "test_pattern" file

파일에서 일치하는 패턴 앞과 뒤에 한 줄을 생성합니다.선이 아니라 지정된 수의 문자를 표시하는 방법이 있습니까?

제 파일에 있는 선들이 꽤 커서 전체 선을 인쇄하는 것에 관심이 없고 문맥상으로만 일치하는 것을 관찰합니다.이것을 어떻게 할 것인지에 대한 제안이 있습니까?

앞의 3자와 뒤의 4자

$> echo "some123_string_and_another" | grep -o -P '.{0,3}string.{0,4}'
23_string_and
grep -E -o ".{0,5}test_pattern.{0,5}" test.txt 

패턴 앞뒤로 최대 5자까지 일치합니다.-o 스위치는 일치만 표시하도록 grep에 지시하고 -E는 확장 정규식을 사용하도록 지시합니다.식 주위에 따옴표를 붙여야 합니다. 그렇지 않으면 셸에 의해 해석될 수 있습니다.

사용할 수 있습니다.

awk '/test_pattern/ {
    match($0, /test_pattern/); print substr($0, RSTART - 10, RLENGTH + 20);
}' file

그러니까, 다음과 같이 말입니다.

grep -o '.\{0,20\}test_pattern.\{0,20\}' file

?

양쪽에 최대 20자까지 인쇄할 수 있습니다.test_pattern.\{0,20\}표기법은 다음과 같습니다.*그러나 0 또는 그 이상의 반복 대신 0 ~ 20회 반복을 지정합니다.-o전체 라인이 아니라 일치하는 부분만 보여달라고 합니다.

나는 이 암호화된 명령 수식어들을 결코 쉽게 기억하지 못할 것이다 그래서 나는 최고의 답을 가지고 그것을 내 안의 함수로 만들었습니다.~/.bashrc파일 이름:

cgrep() {
    # For files that are arrays 10's of thousands of characters print.
    # Use cpgrep to print 30 characters before and after search pattern.
    if [ $# -eq 2 ] ; then
        # Format was 'cgrep "search string" /path/to/filename'
        grep -o -P ".{0,30}$1.{0,30}" "$2"
    else
        # Format was 'cat /path/to/filename | cgrep "search string"
        grep -o -P ".{0,30}$1.{0,30}"
    fi
} # cgrep()

다음은 실제 상황입니다.

$ ll /tmp/rick/scp.Mf7UdS/Mf7UdS.Source

-rw-r--r-- 1 rick rick 25780 Jul  3 19:05 /tmp/rick/scp.Mf7UdS/Mf7UdS.Source

$ cat /tmp/rick/scp.Mf7UdS/Mf7UdS.Source | cgrep "Link to iconic"

1:43:30.3540244000 /mnt/e/bin/Link to iconic S -rwxrwxrwx 777 rick 1000 ri

$ cgrep "Link to iconic" /tmp/rick/scp.Mf7UdS/Mf7UdS.Source

1:43:30.3540244000 /mnt/e/bin/Link to iconic S -rwxrwxrwx 777 rick 1000 ri

인 25K 25K를 사용하여 찾고 입니다.grep.

전화를 걸 수 있는 두 가지 다른 방법에 주목하십시오.cgrep▁parallels것과 같은 것grep방법.

4줄의 코드를 절약할 수 있는 "$2"가 설정되었을 때만 전달되는 함수를 만드는 "niftier" 방법이 있습니다.하지만 저는 그것을 손에 쥐고 있지 않습니다. 같은 거.${parm2} $parm2제가 찾으면 기능과 이 답변을 수정하겠습니다.

와 함께gawk일치 기능을 사용할 수 있습니다.

    x="hey there how are you"
    echo "$x" |awk --re-interval '{match($0,/(.{4})how(.{4})/,a);print a[1],a[2]}'
    ere   are

이 괜찮다면요.perl보다 유연한 솔루션: Following은 패턴 앞에 3자, 그 다음에 실제 패턴, 그리고 그 다음에 5자를 인쇄합니다.

echo hey there how are you |perl -lne 'print "$1$2$3" if /(.{3})(there)(.{5})/'
ey there how

이것은 문자 대신 단어에도 적용될 수 있습니다.Following은 실제 일치하는 문자열 앞에 한 단어를 인쇄합니다.

echo hey there how are you |perl -lne 'print $1 if /(\w+) there/'
hey

다음은 패턴 뒤에 한 단어를 인쇄합니다.

echo hey there how are you |perl -lne 'print $2 if /(\w+) there (\w+)/'
how

Following(팔로우)은 패턴 앞에 한 단어, 그 다음에 실제 단어, 그 다음에 패턴 뒤에 한 단어를 인쇄합니다.

echo hey there how are you |perl -lne 'print "$1$2$3" if /(\w+)( there )(\w+)/'
hey there how

ugrep을 사용하여 지정할 수 있습니다.-ABC이 " " " 인 -o(--only-matching) 일치 전후에 문맥의 추가 문자와 일치하는 내용을 표시합니다. 지정된 범위 내에서 일치하는 내용과 일치하는 내용을 추가합니다.-ABC너비. 예:

ugrep -o -C30 pattern testfile.txt

제공:

     1: ... long line with an example pattern to match.  The line could...
     2: ...nother example line with a pattern.

색상 강조 표시가 있는 터미널에서도 동일하게 다음을 제공합니다.ugrep -- 컨텍스트와 함께 사용할 수 없습니다. 한 줄에 여러 개의 일치 항목이 [+nn more]: 또는 옵션으로 표시됩니다.-k(--column-number) 컨텍스트 및 열 번호와 함께 각 항목을 개별적으로 표시합니다.여기에 이미지 설명 입력 컨텍스트 너비는 ASCII뿐만 아니라 표시되는 유니코드 문자 수(UTF-8/16/32)입니다.

저는 개인적으로 게시된 답변과 비슷한 것을 합니다.하지만 도트 키는 다른 키보드 키처럼 탭하거나 누를 수 있기 때문에..그리고 저는 많은 컨텍스트가 필요하지 않은 경우가 많습니다(더 필요하다면 grep-C와 같은 라인을 수행할 수도 있지만 종종 당신처럼 앞뒤의 라인은 원하지 않습니다). 그래서 저는 명령을 입력하는 것이 훨씬 더 빠르다는 것을 알게 되었습니다. 점 키를 몇 개 누른 다음 키를 누르거나 더 길게 누르면 됩니다.

예.echo zzzabczzzz | grep -o '.abc..'

앞과 뒤에 점이 하나씩 있는 abc 패턴을 가질 것입니다. (regex 언어에서 도트는 임의의 문자와 일치합니다.)다른 사람들도 반복을 지정하기 위해 점을 사용했지만 중괄호가 곱슬곱슬하게 있습니다.

(0 또는 x)자와 정확히 y자 사이에서 엄격하고 싶다면 곡선을 사용합니다.다른 사람들이 그랬던 것처럼 -P.

도트가 새 라인과 일치하는지 여부에 대한 설정이 있지만 관심사/관심사일 경우 확인할 수 있습니다.

ripgreg를 사용하는 경우 다음과 같이 수행할 수 있습니다.

grep -E -o ".{0,5}test_pattern.{0,5}" test.txt 

regeexp grep을 사용하여 강조 표시를 +초로 찾을 수 있습니다.

echo "some123_string_and_another" | grep -o -P '.{0,3}string.{0,4}' | grep string

23_ string_and

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/8101701/grep-characters-before-and-after-match

반응형