运行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,但我对这些解决方案没有多少经验。我该怎么做呢?
答案 0 :(得分:1)
我们只能用卷名整个输入字符串。为此,我们要求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
,则需要先auto pos = map.find(val);
for(auto it = map.begin(); it != map.end(); ++it)
{
// Do something
if (it == pos)
break;
}
。
答案 1 :(得分:0)
您可以使用:
vg_name=$(fdisk -l | grep /dev/mapper/vg_palpatine | sed -n "s/.*\/\(.*\)-.*/\1/p")
vgextend /dev/$vg_name $partitioned_drive