2

テキストファイルに数字を追加して、テキストファイルの数字を置き換えようとしています。すなわち

sed 's/3/4/g' path.txt
sed 's/2/3/g' path.txt
sed 's/1/2/g' path.txt

これの代わりに、自動化できますか。つまり、/d を見つけて、置換でそれに追加します。

何かのようなもの

sed 's/\([0-8]\)/\1+1/g' path.txt

また、複数の数字をキャプチャ([0-9])\t([0-9])し、タブを間に置いて各数字を変更したかった

ありがとう

編集#2 perlの例を使用して、より多くの数字で動作するようにしたいと思います

perl -pi~ -e 's/(\d+)\.(\d+)\.(\d+)\.(\d+)/ ($1+1)\.($2+1)\.($3+1)\.($4+1) /ge' output.txt

上記の作業を行うためのヒントはありますか?

4

5 に答える 5

6

では算術演算はサポートされてsedいませんが、Perl では簡単に実行できます。

perl -pe 's/(\d+)/ $1+1 /ge'

この/eオプションでは、置換式は有効な Perl コードである必要があります。したがって、最終的に更新された例を処理するには、必要です

perl -pi~ -e 's/(\d+)\.(\d+)\.(\d+)\.(\d+)/ $1+1 . "." $2+1 . "." . $3+1 . "." . $4+1 /ge'

文字列は適切に引用符で囲まれ、隣接する文字列は.Perl 文字列連結演算子で連結されます。(算術数値は、文字列と連結される場合にも文字列に変換されます。)

...もちろん、最初のスクリプトはすでによりエレガントにそれを行っています。/gフラグを使用すると、文字列のどこでも、すべての数字のシーケンスが1でインクリメントされるためです。

于 2012-05-28T08:53:59.053 に答える
2

Triplee の perl ソリューションはより一般的な答えですが、Michal の sed ソリューションはこの特定のケースでうまく機能します。ただし、Michal の sed ソリューションはより簡単に記述できます。

sed y/12345678/23456789/ path.txt

としてより適切に実装されます

tr 12345678 23456789 < path.txt

これは、2桁の数字を完全に処理できません(編集された質問のように)。

于 2012-05-28T09:59:19.230 に答える
1

でできますがsed、簡単ではありません。このスレッドを参照してください。

そして awk でも難しいです。これを見てください

私はむしろこれに使用perlしたいと思います(このようなものはアクション @ ideone で見ることができます):

perl -pe 's/([0-8])/$1+1/e'

(ideone はデフォルトでは設定しないため、ideone.com の例には何らかのループが必要-peです。)

于 2012-05-28T09:06:08.143 に答える
0

This might work for you (GNU sed & Bash):

sed 's/[0-9]/$((&+1))/g;s/.*/echo "&"/e' file

This will add one to every individual digit, to increment numbers:

sed 's/[0-9]\+/$((&+1))/g;s/.*/echo "&"/e' file

N.B. This method is fraught with problems and may cause unexpected results.

于 2012-05-28T10:52:40.597 に答える
0

で直接足し算を行うことはできません。各行で正規表現を使用して数値を一致させ、値を増やすことで足し算を行うことができますが、これは非常に複雑ですsedawk0 から 8 までの 1 桁の数字のみのように、任意の数字を処理する必要はなく、限られたセットを処理する必要がある場合は、sedセミコロンで区切って、1 つのコマンド ラインに複数の置換コマンドを配置できます。

sed 's/8/9/g ; s/7/8/g; s/6/7/g; s/5/6/g; s/4/5/g; s/3/4/g; s/2/3/g; s/1/2/g; s/0/1/g' path.txt
于 2012-05-28T08:49:38.467 に答える