
を使用して数学を実行しようとしていますが、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