私はBashでUbuntu 16.04を使用しており、Nginx環境の特定のWebサイトに対してhttp2を有効にする必要があります。
デフォルトでは、ユーティリティはsed
最初の関連行の最初のインスタンスでテキスト処理を実行します(パラメータをg
使用すると、最初の関連行のすべてのインスタンスを処理します)2行以上(実際にはすべての行)
見て、使用する行数を指定できるパラメータをman sed
見つけましたが-l
(正しく理解している場合)、特定の行数に依存せずにすべての行で作業したいと思います。
sed
私が経験している特別なケースは、これら2つの作業を1つに統合しようとしていることです。
s_a="/etc/nginx/sites-available/"
$domain="example.com"
sed -i "s/listen 443 ssl default_server;/listen 443 ssl http2 default_server;/" $s_a/$domain.conf
sed -i "s/listen [::]:443 ssl default_server;/listen [::]:443 ssl http2 default_server;/" $s_a/$domain.conf
sed
これら2つのタスクを次のように統合できます。
sed -i "s/443 ssl default_server/443 ssl http2 default_server/" $s_a/$domain.conf
関連するすべての行がこの便利な1行操作で処理されるようにする最も安全な方法は、いくつかのパラメータを使用することです。ただし、パラメータを介してこれを行うことができるか(-l
存在する場合)、またはパラメータを介して実行する必要があるかどうかはわかりません。正規表現を使用してください。
ベストアンサー1
次の理由でここにバグがあるようです。
sed -i "s/443 ssl default_server/443 ssl http2 default_server/" $s_a/$domain.conf
正常に動作します。 「443 ssl http2 default_server」に置き換えられます$s_a/$domain.conf
。
-l
l
コマンド専用です。
sed
早く終了するなどしないように指示しない限り、すべての行を処理します。コマンドg
のオプションは、s
複数回表示されるクエリを処理する方法にのみ影響します。各ライン:そうでない場合は、g
与えられた行の最初の項目のみが置き換えられますが、を使用するとg
すべての項目が置き換えられます。どちらの場合も、置換はすべての行に適用されます。