我有多个开发板,在我的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=[^ ]+
5条答案
按热度按时间wbgh16ku1#
您可以将
sed
中的正则表达式与捕获组一起使用:另一个选项是使用
awk
(应该在任何awk
中工作):zujrkrfu2#
***第一个解决方案:***使用GNU
awk
中显示的示例,请尝试以下awk
代码。***第二个解决方案:***对于GNU
grep
,您可以尝试以下解决方案,使用-oP
选项在grep
中启用PCRE regex,并在grep
的主节中使用regex^.*?[[:space:]]root=\K\S+
启用PCRE regex,其中\K
用于忽略root=
之前的匹配值,并根据需要获取其余值。***第三个解决方案:***如果您的Input_file总是与所示示例相同,请尝试使用字段分隔符的简单
awk
概念。pn9klfpd3#
由于您使用的是Linux,因此可以使用GNU grep:
其中
o
允许匹配输出,P
将正则表达式引擎设置为PCRE。请参见online demo。* 详细信息 *:\b
-字边界root=
-固定字符串\K
-匹配重置运算符丢弃到目前为止匹配的文本\S+
-一个或多个非空白字符。k3bvogb14#
如果第二个字段的值为,则可以使用awk拆分并检查
root
产出
***或***将
GNU-awk
与捕获组一起使用eqfvzcg85#
另一个
awk
解决方案,使用良好的OLE 'FS / OFS
:match()
、g/sub()
或substr()
*如果你***非常非常***确定这个结构有
root=
,那么:一个三个三个一个
如果你喜欢用
RS
的方式来做: