0

次のようなファイルがあります。

....
....
....
MY_TAG=Release_X_Y
....
....

4 行目は常にこのように表示され、数字が含まれています。例: Release_1_1

私が持つ値は、次のようになるユーザーによって渡される引数です。

1_2_3 

1、2、3 は常にアンダースコアで区切られますが、数字は変化します。

これらの最初の 2 つの数字、つまり 1 と 2 を取得し、それらを使用してテキスト ファイルの行 MY_TAG を置き換える必要があります。sedまたはawkでこれを行うことは可能ですか?

要約すると:

既存のファイル

....
MY_TAG=Release_1_2  <---Line 4
....

ユーザーは引数をスクリプトに渡し、変数として保存されます。

User arg = 4_9_2

上記のファイルを次のように変更します。

....
MY_TAG=Release_4_9
....
4

4 に答える 4

1
#!/bin/bash
RELEASE=${1%_*}  # Trim the last _X from the release number
sed -e "s/^MY_TAG=Release_[0-9_]*/MY_TAG=Release_$RELEASE/" -i file_path
于 2013-09-12T11:38:18.677 に答える
0

次のようなスクリプトを作成できます。

#!/bin/bash
FILE=$1
ARG=$2
[[ -e $FILE && $ARG =~ ^[^_]+_[^_]+ ]] && sed -i "/^MY_TAG=/{ s|^\(MY_TAG=[^_]*\).*|\1_${BASH_REMATCH[0]}|; }" "$FILE"  

例:

bash script.sh file 1_4_5

出力:

...
...
...
MY_TAG=Release_1_4
...
...
...
于 2013-09-12T11:41:05.300 に答える
0

このワンライナーを試してください:

 awk -v arg="4_9_2" 'BEGIN{FS=OFS="=";sub(/_[^_]*$/,"",arg)}NR==4{$2="Release_"arg}7' file

これは、ユーザー入力によって渡される、shall 変数であるarg="4_9_2"可能性があります。arg="$var"$var

于 2013-09-12T11:33:07.827 に答える