1

このような文字列がある場合:

The important variable=123 the rest is not important.

kshで「123」の部分を抽出したいと思います。

これまでに試しました:

print awk ' {substr($line, 20) }' | read TEMP_VALUE

(この20部分は、文字列の開始位置を抽出する方法を理解するまでは、一時的なものです。)

ただし、これは出力するだけawk ' {substr($line, 20) }' | read TEMP_VALUEです(ただし、この形式次のようなコードで機能します:) print ${line} | awk '{print $1}' | read SINGLE_FILE

これを行うための簡単なコマンド(つまり他の言語)がありませんか?

Solaris10を実行しています。

4

6 に答える 6

6

あなたのコマンドは複数の理由で失敗しています:あなたは次のようなものが必要です

TEMP_VALUE=$(print "$line" | awk '...')

ただし、kshパラメータ展開を使用できます。

line="The important variable=123 the rest is not important."
tmp=${line#*=}   # strip off the stuff up to and including the equal sign
num=${tmp%% *}   # strip off a space and all following the first space
print $num       # ==> 123

kshのマニュアルページで「パラメータ置換」を探してください。

于 2012-10-04T16:59:25.250 に答える
6

必要な部分の前にあるものは常に同じ長さであると想定していますか? それで:

echo ${variable:23:3}

それとも、=記号の位置と 123 の後のスペースを区切り文字として使用できると想定していますか? 常に 3 文字であることを知っていますか? 必要な部分が=and で始まる 3 文字の長さであることがわかっている場合:

variable=${variable#*=} # strip off everything up to and including the '=' sign
${variable:0:3} # get the next three characters.

変数の長さと構造に関する詳細情報が本当に必要です。

次のスペースに続くものは何でも欲しいということだけがわかっている場合=、Glenn のソリューションは正しいように見えます。

于 2013-07-26T15:06:06.893 に答える
1

インライン エディタである sed を使用すると、次のようになります。

x='The important variable=123 the rest is not important.'
echo $x | sed "s/.* important variable=\(\d\d\d\) .*/\1

sed は x の文字列に一致します。

. s/ 置換コマンドとテスト正規表現の開始 - .* は、ゼロから何回でも一致します - important variable= は、前のスペースを含む " important variable=" と正確に一致します - (\d\d\d) 3 つの \dエスケープされた括弧で囲まれているため、実際に一致した 3 桁を逆参照できます - .* スペースと .* (なんでも) 再び - / テスト正規表現の終わり - \1 置換文字列

一致したテキスト (実際には $x のすべて) は、$x で見つかった 3 桁の置換文字列に置き換えられます。

于 2014-06-04T16:18:19.320 に答える
0
$ x='The important variable=123 the rest is not important.'
$ print -r -- "${x/*=+([[:digit:]])[[:space:]]*/\1}"
123
于 2012-10-09T16:54:11.490 に答える
0

私は過去にこれを使用しました。

echo "var=123" | awk 'BEGIN{FS="="} {print $2}'

次に、必要に応じて $1 記号を使用して変数を取得することもできます。

于 2013-04-28T16:36:01.090 に答える