0

sed は置換を処理し、同時に式を評価して何らかの方法で置換できますか?

たとえば、テキスト ファイルに次のエントリがあります。

##################################### topd Tree1 - Tree14 #######################################

説明は省きますが、各ツリーの番号は、これまで使用してきた別の番号付けスキームに対して N+1 です。

sed (または実際には任意のユーティリティ、sed は検索と置換操作に使用するだけです) のすべてのインスタンスを見つけて、上記の行が次のようになるようTreeNにそれらを置換できます。TreeN-1

##################################### topd Tree0 - Tree13 #######################################

(Ubuntu 12.02 を使用しているため、ほとんど何でも構いません。)

4

4 に答える 4

4

パールの使用

perl -pe 's/Tree\K\d+/$&-1/ge' file

出力

##################################### topd Tree0 - Tree13 #######################################
于 2016-07-13T10:15:18.103 に答える
1

eこの場合、置換部分で式を評価する修飾子を使用して perl を使用します。

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

また、後読みアサーションを使用するなど、より高度な正規表現サポートを利用することもできます。

perl -pe 's/(?<=Tree)(\d+)/$1 - 1/ge'
于 2016-07-13T10:12:07.387 に答える
0

以下のgnu awkの使用

awk '{
    for(i=1;i<=NF;i++){
     $i ~ /^Tree[[:digit:]]+$/
     {
     n=(gensub(/Tree/,"",1,$i)-1);
     $i=gensub(/Tree([[:digit:]]+)/,"Tree"n,1,$i);
     }
     }
     print}' file

トリックをするだろう

于 2016-07-13T10:59:52.583 に答える