sed 用数字 1 替换数字
sed replace number with number-1
sed 可以处理替换并同时计算表达式以某种方式进行替换吗?
例如,我在文本文件中有以下条目:
##################################### topd Tree1 - Tree14 #######################################
由于我不会深入探讨的原因,相对于我目前使用的另一种编号方案,每棵树的编号都是 N+1。
可以 sed(或者任何实用程序,sed 只是我用于查找和替换操作的工具),找到 TreeN
的每个实例并用 TreeN-1
替换它们,这样上面然后行看起来像:
##################################### topd Tree0 - Tree13 #######################################
(使用 Ubuntu 12.02,几乎任何事情都可以。)
在这种情况下,我将使用 perl,使用 e
修饰符来评估替换部分中的表达式:
perl -pe 's/(Tree)(\d+)/ . ( - 1)/ge'
您还可以利用更高级的正则表达式支持,例如通过使用回顾断言:
perl -pe 's/(?<=Tree)(\d+)/ - 1/ge'
使用 perl
perl -pe 's/Tree\K\d+/$&-1/ge' file
输出
##################################### topd Tree0 - Tree13 #######################################
你可以试试这个;
sed 's/[^0-9,-]*//g' filename | sed -e "s/-/ /g" | awk '{print "##################################### topd Tree"-1 " - Tree" -1 " #######################################"}'
awk '{gsub(/Tree/,"Tree ",[=10=]);print " "" "-1" "" "-1" "}' 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
会成功的
sed 可以处理替换并同时计算表达式以某种方式进行替换吗?
例如,我在文本文件中有以下条目:
##################################### topd Tree1 - Tree14 #######################################
由于我不会深入探讨的原因,相对于我目前使用的另一种编号方案,每棵树的编号都是 N+1。
可以 sed(或者任何实用程序,sed 只是我用于查找和替换操作的工具),找到 TreeN
的每个实例并用 TreeN-1
替换它们,这样上面然后行看起来像:
##################################### topd Tree0 - Tree13 #######################################
(使用 Ubuntu 12.02,几乎任何事情都可以。)
在这种情况下,我将使用 perl,使用 e
修饰符来评估替换部分中的表达式:
perl -pe 's/(Tree)(\d+)/ . ( - 1)/ge'
您还可以利用更高级的正则表达式支持,例如通过使用回顾断言:
perl -pe 's/(?<=Tree)(\d+)/ - 1/ge'
使用 perl
perl -pe 's/Tree\K\d+/$&-1/ge' file
输出
##################################### topd Tree0 - Tree13 #######################################
你可以试试这个;
sed 's/[^0-9,-]*//g' filename | sed -e "s/-/ /g" | awk '{print "##################################### topd Tree"-1 " - Tree" -1 " #######################################"}'
awk '{gsub(/Tree/,"Tree ",[=10=]);print " "" "-1" "" "-1" "}' 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
会成功的