搜索输出行并保存在变量中

时间:2012-03-02 04:13:59

标签: shell clearcase clearcase-ucm

如何搜索shell脚本输出的单词并保存在其他变量中。

下面的命令将在我的视图中显示基线列表。

cmd :cleartool lsstream -fmt "%[found_bls]NXp\n" -view $VIEW_NAME

输出:

baseline:MHC_BUILDTREE1.0.1
baseline:JEPG_DUIF_CI
baseline:MOR_BuildTree_BLD_I.0.1

我需要搜索包含"MOR_BuildTree"的行,并且我必须将输出行保存在一个变量中以执行其余命令。 任何人都可以提出建议吗?

3 个答案:

答案 0 :(得分:0)

不完全确定您的要求,但要将变量设置为命令的结果,您可以使用:

var=`command`

或者您可以将命令传递给某个过滤器以根据需要重新格式化。

command | some_filter | another filter

你也可以将两者结合起来:

var=`command | some_filter | another filter`

答案 1 :(得分:0)

以下是我刚刚测试过的所有基础基线中的一个基线:

$ res=`cleartool lsstream -fmt "%[found_bls]CXp" -view $VIEW_NAME | tr -s " " "\\012" | grep $yourBaselineName| sed -e "s/.*://" -e "s/@.*//"`

(将$yourBaselineName设置为您要提取的相应名称)

主要困难来自lsstream -fmt "%[found_bls]CXp" 将在同一输出行列出所有基础基线的事实(因此输出只有一行基线名称,以逗号分隔)。
您需要先将线路分成多个线路 请参阅“How to split one string into multiple strings in bash shell?”:这是上述命令的tr -s " " "\\012"部分。

然后你需要删除前面的内容并遵循基线名称:

 baseline:aBaselineName@/vobs/YourPVob

上述命令的sed部分可以做到:

sed -e "s/.*://" -e "s/@.*//"

(两个正则表达式删除“:”之前和“@”之后的所有内容

答案 2 :(得分:0)

这不是一个简单的shell脚本吗?

variable=$(cmd :cleartool lsstream -fmt "%[found_bls]NXp\n" -view $VIEW_NAME |
           sed -n '/MOR_Buildtree/s/^baseline://p')

-n选项表示“默认情况下不打印”。该命令会查找您的姓名,删除前导baseline:并打印它。