提取输出以用于bash中的变量

时间:2016-12-02 14:51:40

标签: bash variables awk sed scripting

运行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,但我对这些解决方案没有多少经验。我该怎么做呢?

2 个答案:

答案 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