SED コマンド - MAC アドレス

SED コマンド - MAC アドレス

コンピューターの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スクリプトを作成することをお勧めします。

おすすめ記事