
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