【问题标题】:Extracting output to use for a variable in bash提取输出以用于 bash 中的变量
【发布时间】:2017-04-17 12:38:54
【问题描述】:
运行fdisk -l 后,我希望能够提取卷组名称以便稍后在 bash 脚本中输入。示例如下:
fdisk -l | grep /dev/mapper/vg_palpatine
Disk /dev/mapper/vg_palpatine-lv_root: 105.1 GB
vgextend /dev/vg_$vg_name $partitioned_drive
我想从fdisk -l 输出中提取palpatine 并将其作为我的$vg_name 变量输入。有人向我建议了一些不同的解决方案,例如 sed、cut 和 awk,但我对这些没有太多经验。我该怎么做呢?
【问题讨论】:
标签:
bash
variables
awk
sed
scripting
【解决方案1】:
我们可以只使用卷名来输入整个字符串。为此,我们要求 sed 将 (s///) 正则表达式替换为第二个表达式:
vg_name=$(fdisk -l | grep /dev/mapper/vg_palpatine | sed -rn 's/.*vg_(.+)-lv_root.*/\1/p')
正则表达式解释:
.* -> 任意数量的字符。
vg_(.+)-lv_root -> 将卷名捕获为组 1。
我们使用.* 来匹配整个输入字符串,然后我们使用组1 (\1),它只捕获卷名,作为替换。
请注意,如果您想在不同的脚本上使用$vg_name,您需要先export。
【解决方案2】:
你可以用这个:
vg_name=$(fdisk -l | grep /dev/mapper/vg_palpatine | sed -n "s/.*\/\(.*\)-.*/\1/p")
vgextend /dev/$vg_name $partitioned_drive