![](/img/trans.png)
[英]How to replace a number with sed command if number%7==0 in bash?
[英]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.