簡體   English   中英

sed用數字1替換數字

[英]sed replace number with number-1

sed可以處理替換並同時評估表達式以某種方式替換嗎?

例如,我在文本文件中具有以下條目:

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

由於我不願討論的原因,相對於我到目前為止使用的另一種編號方案,每棵樹的編號為N + 1。

可以sed(或者真的是任何util,sed只是我去查找和替換操作所需要的),找到每個TreeN實例並將它們替換為TreeN-1 ,使得上一行如下所示:

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

(使用Ubuntu 12.02,幾乎可以完成所有工作。)

使用Perl

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

產量

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

在這種情況下,我將使用perl以及e修飾符來評估替換部分中的表達式:

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

您還可以利用更高級的正則表達式支持,例如通過使用后置斷言:

perl -pe 's/(?<=Tree)(\d+)/$1 - 1/ge'

您可以嘗試一下;

sed 's/[^0-9,-]*//g' filename | sed -e "s/-/ /g" | awk '{print "##################################### topd Tree"$1-1 " - Tree" $2-1 " #######################################"}'

awk '{gsub(/Tree/,"Tree ",$0);print $1" "$2" "$3$4-1" "$5" "$6$7-1" "$8}' filename

在下面使用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

會做到的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM