「sed」を追加

「sed」を追加

を使用して数学を実行しようとしていますが、sed変数は文字列として処理され続けます。入力は次のとおりです。

$ echo 12 | sed 's/[0-9]*/&+3/'
$ 12+3

私は15を出力として欲しい。プログラムをPythonデーモンとして実行し、stdoutファイルのリダイレクト、そのファイルを開く、タスクの実行、結果の抽出などの段落の置き換えを避けたいので、ある記事でタスクを実行して数学的な結果を変更するだけです。 。私にとってsed最善の方法は、すべてを1行で行うことです。

私はさまざまな方法で入力と出力をキャストしようとしました。

$ echo 12 | sed 's/[0-9]*/int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'

ただし、結果は常に2番目のフィールドを印刷します。

答え1

本当にsedを使用したい場合は、次のようにします。

s/[0-9]/<&/g
s/0//g; s/1/|/g; s/2/||/g; s/3/|||/g; s/4/||||/g; s/5/|||||/g; s/6/||||||/g
s/7/|||||||/g; s/8/||||||||/g; s/9/|||||||||/g
: tens
s/|</<||||||||||/g
t tens
s/<//g
s/+//g
: minus
s/|-|/-/g
t minus
s/-$//
: back
s/||||||||||/</g
s/<\([0-9]*\)$/<0\1/
s/|||||||||/9/; s/||||||||/8/; s/|||||||/7/; s/||||||/6/; s/|||||/5/; s/||||/4/
s/|||/3/; s/||/2/; s/|/1/
s/</|/g
t back

入力する:

1+2
100+250
100-250

出力:

3
350
-150

あなたがそれを受け入れることを選択した場合、あなたの使命は乗算を実装することです。

答え2

sedここでは最善の選択ではなく、算術自体を実行しません(参照数字を増やすところで、どうすればよいでしょうか)。あなたはこれを行うことができますawk

$ echo 12 | awk '{print $0+3}'
15

使用するのに最適なコードは、入力の正確な形式と目的/必要な操作(数字ではないか、複数の数字が含まれている場合など)によって異なります。

これを行うには、次のコマンドを使用することもできますbash

$ echo $(( $(echo 12) + 3 ))

またはexpr同様の方法で使用されます。

答え3

@Richterの挑戦に応えようとしました。これは私があなたのコードの一部を使って行ったことです。

sed 's/[0-9]/<&/g
s/0//g; s/1/|/g; s/2/||/g; s/3/|||/g; s/4/||||/g; s/5/|||||/g; s/6/||||||/g
s/7/|||||||/g; s/8/||||||||/g; s/9/|||||||||/g
: tens
s/|</<||||||||||/g
t tens
s/<//g
s/.*\*$/0/
s/^\*.*/0/
s/*|/*/
: mult
s/\(|*\)\*|/\1<\1*/ 
t mult
s/*//g
s/<//g
: back
s/||||||||||/</g
s/<\([0-9]*\)$/<0\1/
s/|||||||||/9/; s/||||||||/8/; s/|||||||/7/; s/||||||/6/; s/|||||/5/; s/||||/4/
s/|||/3/; s/||/2/; s/|/1/
s/</|/g
t back'

入力する:

04*3
4*3
40*3
42*32
150*20
1*3
3*1
0*3
3*0

出力:すべて正しい結果

答え4

電卓に文字列を入力するだけです。

 echo 12 | sed 's/[0-9]*/&+3/' | bc

関連情報