如何搜索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"
的行,并且我必须将输出行保存在一个变量中以执行其余命令。
任何人都可以提出建议吗?
答案 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:
并打印它。