0

私はシェルスクリプトを初めて使用し、現在cshを使用しています。構成ファイルに次のような行があるとしましょう:

127.0.0.1:2222 127.0.0.2:3333 127.0.0.3:4444

私が望むのは、 array 内の 2 つの変数について解析することだけです。

2222 3333 4444

そしてもう一つ

127.0.0.1 127.0.0.2 127.0.0.3
4

1 に答える 1

2

「有害と見なされる C シェル プログラミング」を読んでください。

構成ファイルで正しい行を取得するにはどうすればよいですか? ファイルには 1 行しかないと仮定しようとしていますが、その行を特定できる限り、それを行う方法はいくつかあります。

set var1=`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`
set var2=`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`

1 つ目は、ドット付き 10 進アドレスの後に「ポート番号」をキャプチャします。2 つ目は、アドレスを取得します。いずれの場合も、結果は値をスペースで区切った文字列に割り当てられます。


いくつかの手動バッシング (MacOS X 10.5.8 の場合 - 「man csh」は「tcsh」ページを出力します) は、次のことを示唆しています。

set arr1=(`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`)
set arr2=(`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`)

この表記 (逆引用符で囲まれた sed コマンドを囲む括弧) を使用して、配列を作成し、以下を使用できます。

echo $arr1[1]
echo $arr1[2]
echo $arr1[3]
echo $arr2[1]
echo $arr2[2]
echo $arr2[3]

(サンプルデータを想定)。これが記載されているマニュアルページの部分では、構文が「(+)」でマークされています。これは、「標準 C シェルへの拡張」を意味する可能性があるため、これが機能するかどうかは環境によって異なります。

于 2009-11-22T02:22:17.400 に答える