-1

私はこのファイルを持っていて、別のアクションを実行できるように、testme= の値のみを取得したいと考えています。しかし、これは多くの行をスローし、実際にはまだ機能しません。

1.test.sh

#!/bin/bash
for i in $(cat /var/tmp/test.ini); do
  # just one output i need: value1
  grep testme= $i 
done

2. /var/tmp/test.ini

; comments
testme=value1
; comments
testtwo=value2
4

5 に答える 5

1

コードを確認しましたが、問題は for ループにあります。

実際にファイルの各行を読み取り、それを grep に渡しますが、これは正しくありません。エラーのある行がたくさんあると思いますが、

そのようなファイル、又はディレクトリはありません

(またはそのようなもの)。

ファイル名を grep に指定する必要があります。(for ループなし)

例えば

grep "testme=" /var/tmp/test.ini
于 2011-10-17T12:57:55.257 に答える
1

どうですか

#!/bin/bash

grep 'testme=' /var/tmp/test.ini | awk -F= '{ print  $2 }'

または、単に bash を使用する

#!/bin/bash

regex='testme=(.*)'

for i in $(cat /var/tmp/test.ini);
do
    if [[ $i =~ $regex ]];
    then
        echo ${BASH_REMATCH[1]}
    fi
done
于 2011-10-17T12:56:35.703 に答える
0

これはどう?

$ grep '^testme=' /tmp/test.ini  | sed -e 's/^testme=//' 
value1

行を見つけて接頭辞を削除し、値のみを残します。grep が反復処理を行います。明示的である必要はありません。

于 2011-10-17T12:54:42.727 に答える
0

awk はおそらくこれに適したツールですが、質問はシェルのみを使用したいことを暗示しているように見えるため、おそらく次のようなものが必要です。

while IFS== read lhs rhs; 行う
  if test "$lhs" = testme; それから
     # ここで、$rhs は testme への代入の右側です
  フィ
完了 < /var/tmp/test.ini
于 2011-10-18T10:19:25.373 に答える