문자열 다음에 모두 제거하도록 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

관련 정보