2

現在、テキスト ファイル内の特定の文字列を grep し、sed のみを使用して行番号を出力する bash スクリプトのコマンドがあります ...

grep -n "<string>" file.txt | sed -n 's/^\([0-9]*\).*/\1/p'

grep は複数の一致を見つけることができるため、複数の行番号が出力されます。このコマンドの出力から、最小値と最大値を抽出し、それらをそれぞれの bash 変数に割り当てたいと思います。これを達成するために、既存のコマンドを変更したり、新しいコマンドを追加するにはどうすればよいでしょうか? awk または sed を使用する必要がある場合は、sed を使用することをお勧めします。ありがとう!

4

5 に答える 5

3

これで最小値と最大値を取得できます:

grep -n "<string>" input | sed -n -e 's/^\([0-9]*\).*/\1/' -e '1p;$p'

それらを配列に読み込むこともできます。

F=($(grep -n "<string>" input | sed -n -e 's/^\([0-9]*\).*/\1/' -e '1p;$p'))
echo ${F[0]} # min
echo ${F[1]} # max
于 2013-04-16T20:18:41.480 に答える
2
grep -n "<string>" file.txt | sed -n -e '1s/^\([0-9]*\).*/\1/p' -e '$s/^\([0-9]*\).*/\1/p'
于 2013-04-16T20:18:13.913 に答える
0

1つのプロセスで実行できます。このような:

awk '/expression/{if(!n)print NR;n=NR} END {print n}' file.txt

次に、配列に割り当てることができます(perrealが提案したように)。または、このスクリプトを変更して、eval を使用して変数に割り当てることができます

eval $(awk '/expression/{if(!n)print "A="NR;n=NR} END {print "B="n}' file.txt)
echo $A
echo $B

出力 (file.txtの 3 行を含むexpression)

1
3
于 2013-04-16T21:18:40.407 に答える