패턴을 일치시키려면 grep을 사용하십시오.\\\"

패턴을 일치시키려면 grep을 사용하십시오.\\\"

내 json에 json 문자열이 있습니다. 이것은 여러 번 인코딩되었으며 결국 많은 이탈 바운스가 발생했습니다 \\\".

크게 단축된 문자열은 다음과 같습니다.

'[{"testId" : "12345", "message": "\\\"the status is pass\\\" comment \\\\\"this is some weird encoding\\\\\""}]'

grep을 시도하여 패턴 발생 횟수를 얻으려고 하는데 \\\"그렇지 않습니까 \\\\\"?

어떻게 해야 합니까?

모든 쉘/파이썬 솔루션이 작동합니다. Python에서는 검색 문자열을 사용하십시오.

search_string = r"""\\\\\""", unexpected EOF오류가 발생합니다.

답변1

\\\"라인의 어느 곳 이든 찾으려면 :

grep -F '\\\"'

즉, -F고정 문자열 검색의 경우 정규식 일치(백슬래시가 특수한 경우)가 아닙니다. 그리고 '...'백슬래시가 특수하지 않은 경우에는 큰따옴표( )를 사용하세요 .

그렇지 않은 경우 -F백슬래시를 두 배로 늘려야 합니다.

grep '\\\\\\"'

또는 다음을 사용하십시오:

grep '\\\{3\}"'
grep -E '\\{3}"'
grep -E '[\]{3}"'

큰따옴표 안에는 또 다른 백슬래시 레이어가 필요하고 "백슬래시 이스케이프를 사용합니다.

#              1
#     1234567890123
grep "\\\\\\\\\\\\\""

백슬래시는 또 다른 쉘 인용 연산자입니다. 그러니 너도 할 수 있어인용하다백슬래시와 "백슬래시가 있는 문자는 다음과 같습니다.

\g\r\e\p \\\\\\\\\\\\\"

grep꼭 필요한 것은 아니지만 위의 문자를 인용했습니다( , , 도 쉘에 특정하지 않기 때문입니다 g( Bourne rep표시되지 않는 한 $IFS)). 내가 인용하지 않은 유일한 문자는 공백 문자입니다. 쉘에서 특별한 의미가 필요합니다: 별도의 매개변수.

\\\"다른 백슬래시가 앞에 오지 않는지 확인하려면

grep -e '^\\\\\\"' -e '[^\]\\\\\\"'

즉, \\\"줄의 시작 부분이나 백슬래시가 아닌 문자 뒤에서 검색합니다.

이때 정규식을 사용해야 하며 고정 문자열 검색은 작동하지 않습니다.

grep이러한 표현식 중 하나와 일치하는 행을 반환합니다. 한 줄에 하나의 표현식으로 작성할 수도 있습니다.

grep '^\\\\\\"
[^\]\\\\\\"'

아니면 한 가지 표현만 사용하세요.

grep '^\(.*[^\]\)\{0,1\}\\\{3\}"' # BRE
grep -E '^(.*[^\])?\\{3}"'        # ERE equivalent
grep -E '(^|[^\])\\{3}"'

PCRE 지원으로 구축된 GNU를 사용하면 grepLookbehind 부정 어설션을 사용할 수 있습니다.

grep -P '(?<!\\)\\{3}"'

일치하는 수를 가져옵니다

카운트를 얻으려면철사패턴과 일치하면(즉, 한 번 이상 발생 \\\") -c옵션을 추가 할 수 있습니다 grep. 그러나 발생 횟수를 원하는 경우 GNU 특정 -o옵션(현재는 다른 구현에서도 지원됨)을 사용하여 모든 발생을 한 줄에 하나씩 인쇄한 다음 wc -l줄 수를 파이프할 수 있습니다.

grep -Po '(?<!\\)\\{3}"' | wc -l

또는 표준/POSIXly에서는 다음을 사용합니다 awk.

awk '{n+=gsub(/(^|[^\\])\\{3}"/,"")};END{print 0+n}'

( 교체된 수량을 awk교체 하고 반환합니다).gsub()

관련 정보