保存'grep |的多行输出削减'变量

时间:2012-10-16 13:07:41

标签: arrays bash variables grep cut

我是新来的,我会尽力解释我的问题:)

我想编写一个备份脚本来保存KVM使用的所有lv

操作系统:Ubuntu Server x64 12.04

Bash 4.2.24

XML文件内容:

<source file='/dev/vg1/lv1'/>
<source file='/dev/vg1/lv2'/>

我的grep / cut命令

grep "<source file='.*.'/>" /backup/$SRCNAME/$DATUM/$SRCNAME.xml | cut -f2 -d"'" | cut -f4 -d"/"

此输出

lv1
lv2

如何让它对每个输出执行某些操作 - 以最佳方式将输出存储在数组中?

我一直在寻找2天的答案:(我尝试了一些循环和管道,但没有任何效果,因为我的grep命令太具体了:/

1 个答案:

答案 0 :(得分:2)

将其保存到数组中:

array=( $(grep "<source file='.*.'/>" /backup/$SRCNAME/$DATUM/$SRCNAME.xml | cut -f2 -d"'" | cut -f4 -d"/")

您也可以将其传输到循环中:

grep "<source file='.*.'/>" /backup/$SRCNAME/$DATUM/$SRCNAME.xml | cut -f2 -d"'" | cut -f4 -d"/" | while read lv; do
    echo "$lv"
done

但请注意,由于管道,循环可能在子shell中运行,因此对变量的更改不会传播回父shell。

希望这有助于=)