1

次のような行を含むテキスト ファイルがあります。

  variable_name : value

「値」を既知の固定値 (「myvalue」としましょう) に置き換える bash スクリプトを作成する必要があります。

variable_name の値がどれであるかは、以前はわかりません。

sed、grep、awkなど、Linuxボックスのデフォルトのインストールで使用できるbashコマンドを使用する必要があります.

「値」文字列がわかっている場合はsedでそれを行う方法を知っていますが、変数の名前でファイルを検索しても方法がわかりません。

編集:このタスクに複雑さを追加します。たとえば、次のような場合、固定テキストでいくつかのパターンを除外する必要があります。

  variable_name : value
  variable_name : VARIABLE_NAME > lorem_ipsum

文字列 VARIABLE_NAME での置換を除外する必要があります。結果は次のようになります。

  variable_name : myvalue
  variable_name : VARIABLE_NAME > lorem_ipsum     

前もって感謝します、

4

3 に答える 3

3

これを探していますか?

echo "variable_name : value"|sed -r 's/(variable_name :)(.*)/\1myvalue/'
variable_name :myvalue

新しい要件の編集

文字列 VARIABLE_NAME で置換を除外するとおっしゃっていたので (space)> lorem_ipsum、新しい値に置換されると思います。

したがって、次の行が役立つ場合があります。

awk 'BEGIN{v="variable_name";V=toupper(v); FS=OFS=" : "} $1~"^"v{$2=($2~"^"V)?V"myValue":"myValue"}1' file

これを見てください:

kent$  echo "variable_name : value
variable_name : VARIABLE_NAME > lorem_ipsum"|awk 'BEGIN{v="variable_name";V=toupper(v); FS=OFS=" : "} $1~"^"v{$2=($2~"^"V)?V"myValue":"myValue"}1';                         
variable_name : myValue
variable_name : VARIABLE_NAMEmyValue

EDIT2

Neuquino、要件をより明確に説明する必要があります..... とにかく:

 kent$  echo "variable_name : value
variable_name : VARIABLE_NAME > lorem_ipsum"|awk 'BEGIN{v="variable_name";V=toupper(v); FS=OFS=" : "} $1~"^"v && $2!~"^"V{$2="myValue"}1';                                  
variable_name : myValue
variable_name : VARIABLE_NAME > lorem_ipsum
于 2013-01-18T13:48:30.447 に答える
0
awk -F":" 'BEGIN{OFS=":"}/variable_name/{$2="my value"}1' your_file

また、perl を使用することもできます。

perl -pe 'if(/variable_name/){$_=~s/(variable_name :).*/$1 myvalue/g;}' your_file

インプレース置換を行いたい場合:

perl -pi -e 'if(/variable_name/){$_=~s/(variable_name :).*/$1 myvalue/g;}' your_file
于 2013-01-18T13:57:53.713 に答える
0

awk メソッド:

echo "  variable_name : value" | awk -F: -v OFS=: '/variable_name/{ $2=" value2"}1'
于 2013-01-18T13:59:09.763 に答える