我有多个板,在我的bash脚本中,我希望使用regex捕获我的根文件系统名.当我做cat /proc/cmdline分时,我会有这样的感觉:

BOOT_IMAGE=/vmlinuz-5.15.0-57-generic root=/dev/mapper/vgubuntu-root ro quiet splash vt.handoff=7

我只想选/dev/mapper/vgubuntu-root

到目前为止,我使用这个命令成功捕获了root=/dev/mapper/vgubuntu-root

\broot=[^ ]+

推荐答案

您可以将您的正则表达式用于sed中的捕获组:

sed -E 's~.* root=([^ ]+).*~\1~' /proc/cmdline

/dev/mapper/vgubuntu-root

另一种 Select 是使用awk(应该可以在任何awk中使用):

awk 'match($0, /root=[^ ]+/) {
   s = substr($0, RSTART, RLENGTH)
   sub(/^[^=]+=/, "", s)
   print s
}' /proc/cmdline

# if your string is always 2nd field then a simpler one
awk '{sub(/^[^=]+=/, "", $2); print $2}' /proc/cmdline

Linux相关问答推荐

匹配模式和提取

Boost更新失败,现在不确定我有哪个版本

如何查明第三方是否杀死或 destruct 了 C++ 中的程序

Google Cloud Ops Agent Mongo 集成错误 - AuthenticationFailed:SCRAM 身份验证失败,storedKey 不匹配

从 curl 命令输出中获取值

如何使用 Bash 将随机数据块写入文件

在android上使用lldb-server进行lldb调试?

使用具有特定值的字段对文件进行排序

获取变量中的当前路径并使用它

如何为 Linux 构建 Visual C++ 项目?

如何更改某些文件模式/扩展名的权限?

为什么可执行文件操作系统依赖于?

使用 cmake 构建错误:找不到 -lpthreads

如何使用文件描述符刷新写入?

并行运行 shell 脚本

如何仅打印 hexdump 中的十六进制值,而不打印行号或 ASCII 表?

linux中netstat和ss的区别?

如何运行我所有的 PHPUnit 测试?

卸载从源代码构建的python?

如何计算一个单词在目录的所有文件中出现的次数?