5つのスラッシュを持つsedコマンド

5つのスラッシュを持つsedコマンド

これが何をすべきか知っていますか?

grep -lr . | xargs sed -i '' -e '/ifcfg-wlan0/!s/wlan0/<name of the device>/g'

5つのスラッシュを持つコマンドを見たことがなく、sedそれに関する文書も見つかりません。

答え1

コマンドと条件だと思います。これは、「行が一致wlan0しない限り、すべての項目を置き換えます」を意味します。または、より正確に言うと、「この行が一致する場合には置き換えないでください」を意味するため、拡張して一致しない行から置き換えてください。<name of the device>ifcfg-wlan0ifcfg-wlan0wlan0<name of the device>ifcfg-wlan0

これは私のGNUに次のように文書化されている多くの理解可能な「アドレス」sed、特に正規表現アドレスの1つです。man sedsed

/正規表現/

正規表現 regexp に一致する行に一致します。マッチングは現在のパターン空間で行われ、次のコマンドを使用して変更できますs///

!次のステートメントを否定する方法もわかっている場合は、次の/ifcfg-wlan0/!s/wlan0/<name of the device>/g'疑似コードに置き換えることができます。

unless /ifcfg-wlan0/ {
   s/wlan0/<name of the device>/g
}

最後に、わかりやすくするためにいくつかのスペースを追加して実行します。

$ printf 'wlan0\nifcfg-wlan0\nwlan0\n'
wlan0
ifcfg-wlan0
wlan0

$ printf 'wlan0\nifcfg-wlan0\nwlan0\n' | 
    sed -e '/ifcfg-wlan0/ ! s/wlan0/<name of the device>/g'
<name of the device>
ifcfg-wlan0
<name of the device>

関連情報