Linux shell脚本 - 用于破折号的字符串修剪

时间:2016-11-30 14:19:08

标签: linux shell

我试图从我的Raspberry Pi中获取mac地址,将mac的最后6个字符用作主机名和固定字符串。

这是迄今为止我设法从其他来源工作的东西,但我现在完全陷入了试图削减字符串。

#!/bin/sh -e

MAC="$( sed "s/^.*macaddr=\([0-9A-F:]*\) .*$/\1/;s/://g" /proc/cmdline )"

MAC1="${MAC??????%}"

echo "$MAC1"

Pi使用的shell似乎是Dash,因此通常的BASH命令可以在任何时候完成,不希望工作或在脚本中运行时产生错误。

我在rc.local中使用的完整脚本如下所示。

任何关于如何做到这一点的建议都将受到极大的欢迎。

MAC="pi""$( sed "s/^.*macaddr=\([0-9A-F:]*\) .*$/\1/;s/://g" /proc/cmdline )"
echo "$MAC" > "/etc/hostname"
CURRENT_HOSTNAME=$(cat /proc/sys/kernel/hostname)
sed -i "s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\t$MAC/g" /etc/hosts
hostname $MAC

2 个答案:

答案 0 :(得分:2)

如果你的Pi上有cut命令,你可以 做

MAC1=$( echo $MAC | cut -c 7-12 )

答案 1 :(得分:0)

由于您已经使用sed处理字符串,我建议添加另一个命令:

MAC=$(sed -e 's/^.*macaddr=\([0-9A-F:]*\) .*$/\1/' \
          -e 's/://g' \
          -e 's/.*\(.\{6\}\)/\1/' /proc/cmdline)

额外的sed命令从每一行中提取最后6个字符(我假设你只有一个?)。如果您愿意,可以将命令组合成单个字符串,但我发现这种方法更具可读性。