SED 命令 - MAC 地址

SED 命令 - MAC 地址

我使用计算机的 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

相关内容