정규식 내 확장된 대소문자 구분 플래그

정규식 내 확장된 대소문자 구분 플래그

대소문자를 구분하지 않는 일치를 수행해야 합니다.grepdiv도구. grep과 달리 매개변수가 없지만 --extended-regexp가능합니까?

Perl이나 비슷한 것을 시도했지만 작동하지 않습니다.

$ echo SOME | egrep '(?i)some'
$ echo SOME | grepdiff --extended-regexp '(?i)some'
grepdiff: repetition-operator operand invalid

답변1

grepPerl과 유사한 RE를 사용하도록 가족에게 알려야 합니다 .

echo SOME | grep -P '(?i)some'
SOME

안타깝게도 이 플래그는 사용할 수 없으며 grepdiff, 내가 아는 한 사용할 수 없습니다 -i(대소문자 구분 일치).

pgrepdiff여기에 PCRE를 사용하여 출력을 일치시킬 수 있는 작은 스크립트가 있습니다 diff. 허용되는 플래그 는 허용되지 않습니다 grepdiff. 명명된 파일에서 읽거나표준 입력제공되지 않은 경우. RE를 생략하면 비용이 많이 드는 연산자가 됩니다 cat.

#!/bin/bash
#
# Usage:  pgrepdiff  <re>  [<files...>]
#
# https://unix.stackexchange.com/a/424566/100397
#
tmpd=$(mktemp --tmpdir --directory 'pgd.XXXXXXXXXX')

re="$1"
shift

# Split the file into its context diff parts
cat "$@" | csplit - -f "$tmpd/xx." -k -n4 -s -z '/^@@/' '{*}'

# Save the header preamble for a match
mv -f "$tmpd/xx.0000" "$tmpd/head"
head=

# Iterate across all the diff segments
shopt -s nullglob
for xx in "$tmpd"/xx.????
do
    if grep -q -P "$re" "$xx"
    then
        [[ -z $head ]] && cat "$tmpd/head" && head=yes
        cat "$xx"
    fi
done

# Tidy up
rm -rf "$tmpd"

# Return 0 (success) iff we matched something
[[ -n $head ]]

관련 정보