このsedコマンド/スクリプトで "/fi/a"はどのような役割を果たしますか?

このsedコマンド/スクリプトで "/fi/a"はどのような役割を果たしますか?

/fi/a次は何をしますか?

sudo sed -i.bak '/fi/a #xrdp multiple users configuration \n xfce-session \n' /etc/xrdp/startwm.sh

「fi」を含む行を見つけて、その文字列を次の行に書き込むようです。残念ながら、「fi」のみを対象とするように見えますが、「profile」という単語を含むそのファイルの行にも適用されます。

このコマンドはここと他の多くの場所で推奨されます。
https://medium.com/@vivekteega/how-to-setup-an-xrdp-server-on-ubuntu-18-04-89f7e205bd4e

答え1

このコマンドはあなたが言ったものとまったく一致します。各項目に文字列を追加します。最初fi1行で表示されます。でも見るだけでもfi「プロ」にも似合いますフィリピン諸島ル"または"フィリピン諸島夕方」または「ビリフィリピン諸島することができます」またはその他を含むfi

これを防ぐには、単語の境界()でのみ一致するように指定できます\b。 GNUの場合sed(おそらく他のもの、\b比較的移植可能):

$ cat file
profile
finite
verifiable
foo bar fi

$ $ sed '/\bfi\b/a #xrdp multiple users configuration \n xfce-session \n' file 
profile
finite
verifiable
foo bar fi
#xrdp multiple users configuration 
 xfce-session 

fiご覧のとおり、スタンドアロンバージョンのみが変更されました。したがって、元のコマンドを次のように変更できます。

sudo sed -i.bak '/\bfi\b/a #xrdp multiple users configuration \n xfce-session \n' /etc/xrdp/startwm.sh

sedバージョンが不明ですがサポートされ\bている場合は、-E次のこともできます。

sed -E '/(^| )fi( |$)/a #xrdp multiple users configuration \n xfce-session \n' file 

しかし、私が知っている限り、ほとんどのsed実装はこれを処理できないため、ほとんど\n確実にGNU sedが必要になります。

答え2

fi1行でaを​​一致させるには、^(行の先頭)と(行の終わり)を使用して$固定できます.\n文字列の前後の不要な空白文字を削除することもできます。

sudo sed -i.bak '/^fi$/a #xrdp multiple users configuration\nxfce-session\n' /etc/xrdp/startwm.sh

関連情報