我有几个文件(相同的文件名)和这个文本
die($query);
如何从cmd中增加所有版本号?
我可以轻松version: 24
runtime: python27
命令,但我正在寻找智能增量,而不只是替换文字
sed
答案 0 :(得分:5)
使用awk:
awk '/^version:/ {$2++}1' file
或更短:
Company Type Status
A X done
A Y done
A Z done
C X done
C Y done
B Y done
输出继电器:
version: 25 runtime: python27
答案 1 :(得分:2)
sed
不适合算术运算,您可以在这里使用perl
$ perl -pe 's/\d+/$&+1/e if /version/' ip.txt
version: 25
runtime: python27
s/\d+/$&+1/e
e
修饰符允许在替换部分中使用Perl代码。 $&
包含匹配的字符串(类似于sed中的&
),$&+1
是您需要的结果
if /version/
此替换仅在输入行包含version
对于就地编辑,请使用perl -i -pe 's/\d+/$&+1/e if /version/' /path/to/files
请参阅
关于-i
和-pe
选项
答案 2 :(得分:1)
VER=$(grep 'version' filename | grep -oE '[0-9]+')
sed -i "/version/s/$VER/$((VER+1))/" filename
这真的是一个技巧,因为sed不能进行算术运算,因此我将该作业重载为bash并使用sed仅进行文本替换。
为方便起见,您可能想要将它们包装起来:
incr_ver() {
VER=$(grep 'version' "$1" | grep -oE '[0-9]+')
(( $? )) || sed -i "/version/s/$VER/$((VER+1))/" "$1"
}
并将它们应用于每个文件:
for file in *
do
incr_ver "$file"
done
答案 3 :(得分:1)
使用gnu sed
dd('test');