2016-12-02 33 views
0

使用的变量运行fdisk -l后,我希望能够给卷组名称在bash脚本后解压到输入。实施例下面:提取输出在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输出和输入它作为我$vg_name可变的。我已经提出了一些不同的解决方案,像sed,切割和awk,但我没有与太多的经验。我会如何去做这件事?

回答

0

您可以使用此:

vg_name=$(fdisk -l | grep /dev/mapper/vg_palpatine | sed -n "s/.*\/\(.*\)-.*/\1/p") 
vgextend /dev/$vg_name $partitioned_drive 
+0

无需grep的,sed的可以搜索的罚款。 – 123

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