1

シェル スクリプトの出力の単語を検索し、別の変数に保存する方法。

以下のコマンドは、ビューにベースラインのリストを表示します。

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"、残りのコマンドを実行するには、その出力行を 1 つの変数に保存する必要があります。誰でも提案できますか?

4

3 に答える 3

0

これは単純なシェルスクリプトではありませんか?

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

オプションは、-n「デフォルトで印刷しない」を意味します。このコマンドはあなたの名前を探し、先頭baseline:を削除して印刷します。

于 2012-03-02T07:09:35.980 に答える
0

何を求めているのか正確にはわかりませんが、コマンドの結果に変数を設定するには、次を使用できます。

var=`command`

または、コマンドをフィルターにパイプして、必要に応じて再フォーマットすることもできます。

command | some_filter | another filter

2 つを組み合わせることもできます。

var=`command | some_filter | another filter`
于 2012-03-02T04:19:51.927 に答える
0

以下は、すべての基本ベースラインから 1 つのベースラインを取得するためにテストしたものです。

$ 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"主な問題は、同じ出力行にすべての基礎ベースラインをリストするという事実から生じます(したがって、出力はコンマで区切られたベースライン名の 1 行のみです)。
最初に行を複数に分割する必要があります。「 bash シェルで 1 つの文字列を複数の文字列に分割する方法は?」を
参照してください。これは上記のコマンドの一部です。tr -s " " "\\012"

次に、ベースライン名の前後にあるものを削除する必要があります。

 baseline:aBaselineName@/vobs/YourPVob

sed上記のコマンドの一部はそれを行うことができます:

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

:(2 つの正規表現は、' ' の前と ' ' の後のすべてを削除します@)

于 2012-03-02T06:53:45.927 に答える