我的问题实际上是一个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"内容并将其存储到变量中?

#1楼 票数:2

使用参数替换:

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

#2楼 票数:2

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)

#3楼 票数:1

使用sed:

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

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

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

echo $a

  ask by Marc Le Bihan translate from so

未解决问题?本站智能推荐:

1回复

将命令字符串的一部分存储为bash中的变量

我正在使用一个变量来组合命令: 编辑 1:使用 cmd='sudo -i -u $domain wp --path=$path' 的示例;echo $cmd |bash 尝试执行上述操作时出现错误。 我试过使用'single quotes'和"double quotes"而不是(parenthesi
3回复

如何将命令的一部分存储到变量中

我有以下bash脚本 我需要列出除.git dir和.gitignore文件中的文件之外的所有文件,而不是chmod。
3回复

在bash中将变量扩展为命令的一部分

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

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

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

bash,解析文件的一部分

想象一个文本文件,如下所示: 其中包含多个变量在不同时间点的值。 例如,情况4与变量a和b有关。 如何仅提取case 4.1和endcase 4.1之间的行?
2回复

使用文件内容作为Bash命令的一部分

我想使用 file.txt 的内容作为 bash 命令的一部分。 假设我要执行的 bash 命令及其选项是: 但是前两个选项(-a 和 --b_long_version_option )非常冗长,因此我没有直接在命令行(或 bash 脚本)上插入,而是将它们写在 file.txt 中,如下所示:
3回复

如何使用bash仅解析具有不同定界符的变量的一部分?

我在bash文件中有一个循环,以向我显示目录中的所有文件,每个文件均为其自己的变量。 我需要获取该变量(文件名)并仅解析出一部分。 例: 92378478234978ehbWHATIWANT#98712398712398723 现在,假设“ ehb”和英镑符号永不改变,如何将WHA
1回复

bash显示包含路径的变量的一部分

我正在尝试输出文件路径的一部分,但删除文件名和路径的某些级别。 当前,我有一个for循环,可以做很多事情,但是我要从完整的文件路径创建一个变量,并希望去除一些位。 例如 会给我 我想要做的是printf / echo一些该变量。 我知道我可以做: 但我想删除文件名并最终得到