如何在Bash脚本中用正则提取/proc/cmdline的根文件系统路径?
在Bash中提取根文件系统路径的方法
针对你的需求,这里提供几种可行的实现方式,直接提取/proc/cmdline中root=后的路径:
方法1:使用grep的PCRE正则(推荐)
利用正向零宽断言跳过root=前缀,只匹配后续的路径内容:
grep -oP '(?<=root=)[^ ]+' /proc/cmdline
-o:只输出匹配到的部分-P:启用PCRE正则语法(?<=root=):正向预查,确保匹配位置前是root=[^ ]+:匹配所有非空格字符,直到遇到第一个空格为止
方法2:使用sed的分组捕获
通过正则分组提取目标内容,替换整行只保留分组结果:
sed -n 's/.*root=\([^ ]*\).*/\1/p' /proc/cmdline
-n:默认不输出行内容\([^ ]*\):将root=后的非空格内容捕获为第1组\1:在替换时引用第1组的内容,p命令打印处理后的行
方法3:Bash内置参数替换(无需外部工具)
直接通过Bash的字符串处理能力提取路径,避免调用外部命令:
cmdline=$(cat /proc/cmdline) root_path=${cmdline#*root=} # 移除开头到"root="的所有内容 root_path=${root_path%% *} # 移除第一个空格到结尾的所有内容 echo "$root_path"
对原有正则的调整说明
你之前的正则\broot=[^ ]+会匹配包含root=的完整串,只需通过分组捕获或正向预查排除root=前缀,就能直接得到目标路径。
内容的提问来源于stack exchange,提问作者void_brain
相关产品推荐
相关产品推荐

