마지막 숫자가 줄의 끝에 sed regexp 숫자 문자 클래스에 CR 문자가 포함되는 이유는 무엇입니까?


0

URL에서 Content-Length의 크기를 추출하고 같은 줄에 URL + $ size를 출력하고 싶었습니다.

내가 작업 한 데이터 :

> curl -I -s http://yahoo.com
HTTP/1.1 301 Redirect
Date: Thu, 10 Mar 2016 13:58:34 GMT
Via: https/1.1 ir18.fp.bf1.yahoo.com (ApacheTrafficServer)
Server: ATS
Location: https://www.yahoo.com/
Content-Type: text/html
Content-Language: en
Cache-Control: no-store, no-cache
Connection: keep-alive
Y-Trace: BAEAQAAAAADEVnKTAIhTVAAAAAAAAAAA52rmwEDlxSwAAAAAAAAAAAAFLbI13bX.AAUtsjXdvxvBYm3xAAAAAA--
Content-Length: 304

다음은 간단한 예입니다. Content-Length를 추출하고 필요한 필드를 잘라 냈습니다. URL 대신 "a"를 에코합니다.

> size=$(curl -I -s http://yahoo.com | grep "Content-Length:" | cut -f2 -d" "); echo $size"a"
> a04

"a"제 자리를 덮어.

Content-Length 헤더 행이 0D 문자로 닫히고 숫자와 함께이 캐리지 리턴이 나타납니다. 나는 그것이 cut0D를 떠날만큼 똑똑하지 않다고 생각 했지만 단순히 추출을 일부 정규 표현식 도구로 변경하면 동일하게 작동합니다.

> size=$(curl -I -s http://yahoo.com | grep "Content-Length:" | sed 's/Content-Length: \([[:digit:]]*\)/\1/'); echo $size"a"
> a04

이는 [[: digit :]] 문자 클래스 에 0D 문자 포함되어 있음을 의미합니다 . 문자열의 끝을 명시 적으로 표시하려고 시도했지만 작동했습니다.

> size=$(curl -I -s http://yahoo.com | grep "Content-Length:" | sed 's/Content-Length: \([[:digit:]]*\).*/\1/'); echo $size"a"
> 304a

TL; DR : 정규식 문자 클래스에 0D 문자가 포함 된 이유는 무엇입니까?

답변:


1

그렇지 않았다.

strintg:     Content-Length: 304\0d
matched:     Content-Length: 304
replaced by:                 304
result:                      304\0d

일치하지 않아 제거되지 않았습니다. 방금 거기 있었어


서사시 사고가 발생했습니다.
karatedog
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.