我有一个命令,在执行时会给出以下输出
$ cleartool pwv
Working directory view: abhijeet_trialProj_r2.4-phase1_ba_abhijeet_branch
Set view: abhijeet_trialProj_r2.4-phase1_ba_abhijeet_branch
$ cleartool pwv
Working directory view: ** NONE **
Set view: abhijeet_trialProj_r2.4-phase1_ba_abhijeet_branch
$ ct pwv
Working directory view: ** NONE **
Set view: ** NONE **
我在shell脚本中使用此命令“cleartool pwv”。
view_used=`cleartool pwv`
因此$ view_used被赋予字符串“工作目录视图:**无**设置视图:abhijeet_trialProj_r2.4-phase1_ba_abhijeet_branch”
我需要从$ view_used中检索两个值
working_dir_view =“**** NONE ****”或“ abhijeet_trialProj_r2.4-phase1_ba_abhijeet_branch ”
set_view =“**** NONE ****”或“ abhijeet_trialProj_r2.4-phase1_ba_abhijeet_branch ”
有些人可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:1)
如果你有awk,
var=$(cleartool pwv |awk -F":" '/Working directory view/{
t=$2
}/Set view/{s=$2}
END{
print t,s
}
')
set -- $var
echo $1
echo $2
使用shell(bash)脚本
while IFS=":" read -r a b
do
case "$a" in
*"Working directory"* ) w="$b";;
*"Set view"* ) s="$b";;
esac
done <"file1"
echo "$w"
echo "$s"
答案 1 :(得分:0)
假设他们总是那种格式(两行,相同的顺序,冒号分隔符):
working_view="$(ct pwv | head -1 | sed 's/[^:]*: //')"
set_view="$(ct pwv | tail -1 | sed 's/[^:]*: //')"
如果您必须使用${view_used}
(换句话说,如果您不想两次调用ClearCase工具),只需将其替换如下:
working_view="$(echo "${view_used}" | head -1 | sed 's/[^:]*: //')"
set_view="$(echo "${view_used}" | tail -1 | sed 's/[^:]*: //')"
答案 2 :(得分:0)
如果你有awk:
working_dir_view=$(cleartool pwv | awk '
/Working directory view/ {gsub(/.*:\s+/,"");print $0}
')
set_view=$(cleartool pwv | awk '
/Set view/ {gsub(/.*:\s+/,"");print $0}
')
如果你真的想从变量中的字符串中做到这一点:
working_dir_view=$(echo $view_used | awk '
/Working directory view/ {gsub(/.*:\s+/,"");print $0}
')
set_view=$(echo $view_used | awk '
/Set view/ {gsub(/.*:\s+/,"");print $0}
')
在脚本文件中,将它们重构为函数可能更具可维护性:
getView(){
echo $2 | awk "/$1 view/ {gsub(/^.*:[ \t]+/,\"\");print\$0}"
}
现在你可以这样做:
working_dir_view=`getView "Working directory" "$view_used"`
set_view=`getView Set "$view_used"`