sed는 문자열 뒤의 모든 것을 삭제합니까?

sed는 문자열 뒤의 모든 것을 삭제합니까?

sed를 사용하여 다음 줄의 나머지 부분을 삭제해 보았습니다. HTTP1.1" 200

큰따옴표와 공백을 포함하여 전체 내용을 문자열로 일치시키려는 것을 sed가 이해하도록 하는 방법을 모르겠습니다.

나는 좋은 예를 들고 싶다:

"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...

입력하다

"GET /images/loading.gif HTTP/1.1" 200

답변1

명령줄에서 sed(또는 대부분의 다른 도구)를 사용할 때는 문자열을 공백으로 인용해야 합니다. 이미 큰따옴표를 사용했으므로 작은따옴표를 사용해야 합니다.

echo '"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...' | \
     sed 's|HTTP/1.1" 200.*|HTTP/1.1" 200|'

다음을 제공합니다:

"GET /images/loading.gif HTTP/1.1" 200

답변2

GNU grep을 사용하십시오:

| grep -o '.*HTTP/1\.1" 200'

GNU sed 사용:

| sed -r 's/(.*HTTP\/1\.1" 200).*/\1/'

답변3

일치하는 문자열 뒤에 개행 구분 기호를 추가하면 P패턴 공간을 너무 많이 수정하지 않고도 일정량의 패턴 공간만 인쇄할 수 있습니다. 이는 패턴 공간에 문자의 일부가 아닌 바이트가 포함된 경우에도 종종 작동합니다.

sed -n 's|HTTP/1.0” 200|&\n|;P' <in >out

n참고: GNU로 작성된 대로 작동하지만 위에 사용된 줄 바꿈 대신 리터럴 줄 바꿈을 사용하는 것이 좋습니다.sed

관련 정보