コンピューターのMACアドレスをユーザーIDとして使用しており、ユーザーID /有効期限を示すファイル(display.txt)を更新したいと思います。交換するにはどうすればいいですか?有効期限存在するディスプレイ.txt日付は次のとおりです。日付.txtMACアドレスに対応します。
userid部分を正常に使用しました。
sed -i "s/user/$(ifconfig eth0 |
grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}')/" \
/user/id/display.txt > /dev/null
ディスプレイ.txt:
UserID: user
User expiring on expdate
expdate.txt:
user = 00:09:34:2C:66:AB
expdate = 2017-05-20
user = 00:09:34:29:86:6C
expdate = 2017-08-23
したい:
ディスプレイ.txt:
UserID: 00:09:34:29:86:6C
User expiring on 2017-08-23
ベストアンサー1
grepとsedを使って1行の解決策を見つけました。
mac=$(ifconfig eth1 | grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}'); grep "$mac" expdate.txt -A 1 | sed -r ':a;N;$!ba;s!user.*=.(..\:..\:..\:..\:..\:..).*expdate.*=.(....-..-..)!UserID: \1\nUser expiring on \2!g' > display.txt
そして、テストしたすべてのMacアドレスで動作していることを確認するには:
mac=$(echo "00:09:34:29:86:6C") ; grep "$mac" expdate.txt -A 1 | sed -r ':a;N;$!ba;s!user.*=.(..\:..\:..\:..\:..\:..).*expdate.*=.(....-..-..)!UserID: \1\nUser expiring on \2!g' > display2.txt
最初から出力を生成します。既存のファイルを置き換える必要がある場合は、次のテンプレート言語を使用することをお勧めします。ひげ。 Bashのバージョンはオンラインです。GitHub
ただし、macアドレスを再利用する必要があるようです(最初に検索してから出力する)、再利用可能性の高いbashスクリプトを作成することをお勧めします。