2

次の行を含むinfo.logというファイルがあります。

/home/jax/Main_X_1_A

X1、およびAは意味があり、変更できます。ただし、 「メイン」とアンダースコアは同じままです。ユーティリティを使用して、 info.logの情報に基づいてシェル変数に値を割り当てることはできますか?

例えば

MY_VERSION="?_?_?"; 

疑問符は、それらの場所で見つかった単一の文字を表します。たとえば、info.logに次の行が含まれているとします。

/home/jax/Main_1_2_3

そして、そのデータを使用してシェル変数を初期化しました。

MY_VERSION=...
echo $MY_VERSION

出力は次のようになります。

1_2_3

より良い例で質問を更新:

情報ログ

MODULE=TEST
QUICK_BUILD_DIR=/usr/apps/Main_1_2_3
ANT_FILE=build.xml
FANCE=/usr/apps/test/Main_1_2_3

これらの3つの数字(1、2、3)を取得できるようにしたい:

QUICK_BUILD_DIR=/usr/apps/Main_1_2_3

そしてそれらを変数に割り当てます。

注: 1、2、および 3 は単なる例であり、変更される可能性があります。

4

4 に答える 4

2

これを試すことができますか?

var="MY_VERSION=1_3_2"
version=$(echo $var | sed 's/.*MAIN_\(.*\)/\1/') #version will be 1_3_2

これは bash と sed を使用します。

于 2013-08-30T14:35:17.997 に答える
1

GNU Awk ソリューション

$ MY_VERSION=$(awk -F/ '/Main_/ { sub(/Main_/, "", $NF); print $NF }' info.log)
$ echo "$MY_VERSION"
X_1_A
于 2013-08-30T14:43:25.367 に答える
1

次の awk コマンドを使用できます。

cat file
/home/jill/Main_1_2_4
/home/jax/Main_1_2_3
/home/john/Main_X_1_A

awk -v u=jax -F '/' '$3==u{sub(/^Main_/, "", $4); print $4}' file
1_2_3

ここでは、変数内の任意のユーザー名をu(ここで渡されているように) awkに渡すことができjax、バージョンはその特定の行から選択されます。

于 2013-08-30T15:15:05.573 に答える