【问题标题】: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
      

      【讨论】:

      • 不需要grep,sed可以正常搜索。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2020-10-12
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      相关资源
      最近更新 更多