如何从内核命令行中提取根变量的值

How to extract value of root variable from kernel commandline

我想在下面的内核命令行中提取设置到根变量的值,我不想使用 awk 列号。

console=ttyO0,115200n8 noinitrd mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait=1 ip=none

我可以使用以下命令提取它,但这取决于根变量的位置,但如果该位置发生变化,它将无法工作

cat /proc/cmdline | awk '{print }' | cut -d '=' -f2

有 suggestions/hint/pointers 吗?

编辑:
所有答案都正确,我接受亚伦的回答,因为他是第一个回复的。

sed 在这里效果更好:

cat /proc/cmdline | sed -e 's/^.*root=//' -e 's/ .*$//'

第一个表达式删除 root= 和之前的所有内容。第二个删除下一个 space 和之后的所有内容。

您可以使用:

awk -F 'root=' '{sub(/ .*$/, "", ); print }' /proc/cmdline
/dev/mmcblk0p2

或者不使用正则表达式甚至更短:

awk -F '=' '=="root"{print }' RS=" " /proc/cmdline
/dev/mmcblk0p2

awk 命令使用 root= 作为字段分隔符,并将 root= 之后的所有内容作为 </code>(第二个字段)。 <code>sub 函数剥离 space 之后的所有内容,在 </code> 中留下 <code>/dev/mmcblk0p2 并打印出来。

$ echo $root

$ cat /proc/cmdline | grep -o '\broot=[^ ]*'
root=/dev/mapper/VolGroup-lv_root
$ eval $(cat /proc/cmdline | grep -o '\broot=[^ ]*')
$ echo $root
/dev/mapper/VolGroup-lv_root

另一个 awk:

cat /proc/cmdline | awk -v RS=" " '/^root=/ {print substr([=10=],6)}'

它使用 RS(记录分隔符)将每个 space 分隔的参数拆分为不同的 awk 记录。然后,模式和 substr() 函数都可以引用找到的记录的开头。