繁体   English   中英

解析bash命令结果的一部分以将其存储到变量中

Parse a part of the result of a bash command to store it into a variable

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我的问题实际上是一个bash问题,即使它涉及安装磁盘。

在创建VM的过程中,通过脚本安装了该磁盘:

sudo mount -t ext4 /dev/sdb /data

而且我想在每次系统启动时都保留它。 使此安装变为自动。 我了解到我必须为此编辑/etc/fstab文件:在其上添加一行。

挂载磁盘后,必须运行命令:

$ sudo blkid /dev/sdb
/dev/sdb: UUID="238d1293-918e-42e1-a081-a41f497636d0" TYPE="ext4"

要获取UUID,我需要在我的/etc/fstab文件中附加的行中提及:

UUID=238d1293-918e-42e1-a081-a41f497636d0       /data      ext4    defaults      0       0

我的问题是:我可以通过bash解析blkid命令的结果,从/dev/sdb: UUID="238d1293-918e-42e1-a081-a41f497636d0" TYPE="ext4"捕获部分UUID="238d1293-918e-42e1-a081-a41f497636d0" /dev/sdb: UUID="238d1293-918e-42e1-a081-a41f497636d0" TYPE="ext4"内容并将其存储到变量中?

3 个回复

使用参数替换:

uuid=$(sudo blkid /dev/sdb)
uuid=${uuid#*UUID=\"}  # Remove from left up to UUID="
uuid=${uuid%%\"*}      # Remove from right from the leftmost "
echo "$uuid"

Bash的内置正则表达式支持适用于任务。 在下面的函数中,我们针对正则表达式UUID="([^"]+)"测试blkid的输出,如果找到匹配项,则发出匹配组内容(括号内的所有内容):

uuid_for_device() {
  local uuid_re blkid_text      # Declare our locals so we don't leak into global scope
  uuid_re='UUID="([^"]+)"'      # Save the regex to a variable; less gotchas this way
  blkid_text=$(sudo blkid "$1") || return # Collect the data we're going to match against
  [[ $blkid_text =~ $uuid_re ]] && echo "${BASH_REMATCH[1]}" # Emit output if regex matches
}

...将在给定uuid_for_device /dev/sda发出所需的UUID,您可以像往常一样将其捕获到变量中( sda_uuid=$(uuid_for_device /dev/sda) )。


也就是说,对于您的实际用例,最好只使用一种更合适的工具来完成工作:

uuid_for_device() { findmnt -n -o UUID "$1"; }

sda_uuid=$(uuid_for_device /dev/sda)

或者,当然,简单地:

sda_uuid=$(findmnt -n -o UUID /dev/sda)

使用sed:

YOUR_COMMAND | sed -e 's/.*UUID="\([0-9a-f-]*\)".*/\1/'

您可以使用反引号来存储它:

a=`YOUR_COMMAND | sed -e 's/.*UUID="\([0-9a-f-]*\)".*/\1/'`

echo $a
3 在bash中将变量扩展为命令的一部分

有什么方法可以在命令内部扩展变量? 我很难解释我想要达到的目标,因此我将演示它: 假设我有这个结构: 所需的输出是: 现在显然这是行不通的,但是我将如何进行类似的工作? ...

4 解析文件名的一部分以用作bash中的变量

我需要获取数据库名称并将其用作文件名部分的变量。 目前我从ls命令中提取文件的名称。 这是它返回的内容: 测试20150311-1200.sql 我需要文件名的第一部分到“ - ”,所以对于这个例子,它将是Test。 我怎样才能获得变量的部分文件名? 下面是我正在处理的完整脚本。 ...

5 哪个xml parse暗示仅解析XML的一部分并将其存储在DB中

我一直在网上搜索,但是找不到符合我要求的内容,也不知道该怎么办。 我知道这个问题已经被问过几次了,但并不完全一样。 我们有一些大的XML文件(仍然不知道大小,但我想肯定小于1GB)。 我们只需要一部分文件(只有一部分XSD对我们有用),我们必须先阅读然后将其存储在DB中。 将来,我们 ...

10 将页面的一部分存储在变量中

我有一个页面包含一个表,该表包含很多这样的代码 如您所见,表格具有php编码,现在我想将整个表格存储在变量中,这样我就可以将其发送到pdf打印库tcpdf ...

2014-02-26 13:03:14 2 59   php
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM