我使用计算机的 MAC 地址作为用户 ID,并希望更新将显示用户 ID/到期时间的文件 (display.txt)。我该如何更换过期日期在显示.txt日期在日期.txt对应MAC地址。
我成功使用了 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 的单行解决方案:
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 脚本,它会更可重用。
答案2
通过连接sed
输出:
sed -e 's/user/UserID/g' expdate.txt | sed -e 's/ //g' | sed -e 's/=/: /g' | sed -e 's/expdate:/User expiring on/g' > display.txt
(很确定这也可以只用一个来完成sed
)