私は次のコードを書いた。
#!/usr/bin/bash
wireless_state=$(ip l |grep "3: wlp" |sed -E 's/^.*state ([DOWNUP]{2,4}).*/\1/')
ethernet_state=$(ip l |grep "2: en" |sed -E 's/^.*state ([DOWNUP]{2,4}).*/\1/')
if [[ $ethernet_state == "DOWN" ]]; then
sed -i 's/^Match Address 192.168.18.109/#Match Address 192.168.18.109/;s/^Match Address 192.168.18.112/#Match Address 192.168.18.112/' sshdc
fi
sshdc
コピーはどこで見つけることができますか/etc/ssh/sshd_config
?私の尾/etc/ssh/sshd_config
は次のとおりです
#Match Address 192.168.18.103
#PubkeyAuthentication yes
Match Address 192.168.18.109
PubkeyAuthentication yes
#Match Address 192.168.18.111
#PubkeyAuthentication yes
Match Address 192.168.18.112
PubkeyAuthentication yes
私のコードで2行のブロック全体をコメントアウトするようにしたいと思います。
#Match Address 192.168.18.109
# PubkeyAuthentication yes
そして、これまで私のコードには、次のようにブロックの最初の行だけがコメントアウトされています。
#Match Address 192.168.18.109
PubkeyAuthentication yes
as行はMatch Address 192.168.18.109
一意ですが、 PubkeyAuthentication yes
ファイルのPubkeyAuthentication no
頭の部分のどこかにインデントされていない行もあります。または他のGNU / Linuxユーティリティを使用してこれらのタスクをどのようにsed
実行できますかawk
?この質問の範囲を超えて、Pythonのソリューションを維持してください。
ベストアンサー1
少なくともGNU sed(GNU / Linuxのデフォルト)の場合は使用できます。アドレス範囲形
addr1,+N Matches addr1 and the N lines following addr1.
例えば
$ sed '/^Match Address 192\.168\.18\.109/,+1s/^/#/' sshdc
#Match Address 192.168.18.103
#PubkeyAuthentication yes
#Match Address 192.168.18.109
# PubkeyAuthentication yes
#Match Address 192.168.18.111
#PubkeyAuthentication yes
Match Address 192.168.18.112
PubkeyAuthentication yes