-1

Debian ベースのディストリビューションで実行するスクリプトに問題があります。「Hello World」を含む各行全体を新しいテキスト ファイルにコピーしたいと考えています。今、私はこのスクリプトでそれをやっています:

#!/bin/bash 
string1=$(grep "Hello World" log.txt)
if [ "$string1" != "" ]; then
    echo $string1 >> output.txt
fi
truncate --size 0 log.txt

しかし、問題が 1 つあります。このスクリプトを 1 時間ごとにスケジュールして実行しています。1 時間に 10 個の「Hello World」が log.txt に書き込まれている場合、「Hello World」に一致するすべての行を 1 つの単純な行で output.txt に取得します。これを読むのは非常に紛らわしいです。

「Hello World」を含む各行全体を、区切り行の output.txt にエクスポートするにはどうすればよいですか?

(切り捨ての最後の行は、空の行が書き込まれないということだけです)

4

1 に答える 1

1

スクリプトなどでステートメントを記述var=$(grep "pattern" file)すると、変数には、ステートメントの結果のセット全体がスペースで区切られて格納されます。各結果を別々の行に含むファイルを作成するには、次のように記述します。

var=$(grep "pattern" file)
for v in "$var"
do
  echo $v >> $outfile
done

ただし、これにはスペースを含むパターン/行で問題が発生するため、次のようなことを行う方がよい場合があります。

var=($(grep "pattern" file)) # creates an array
for v in "${var[@]}" # guards against whitespace issues
do
  echo $v >> $outfile
done

統計のみが必要な場合は、 の使用も検討してvar=$(grep -c "pattern" file)ください。

この質問も参照してください。

于 2013-10-30T02:13:19.943 に答える