文字列の後をすべて削除するには 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が、GNUsed

関連情報