我有
$string1=\-9-0 ---> $increment1=\-10-0
$string2=\-99 ----> $increment2=\-100
$string3=\-999-0-4 --> $increment3=\-1000-0-4
我需要将第一个出现的整数增加到+1值,整数以-
为前缀
答案 0 :(得分:1)
使用 awk
awk 'BEGIN{FS=OFS="-"} {$2=$2+1; print}' <<<$string1
说明:
我们已将字段分隔符/分隔符设置为FS
为-
,
因此,在字符串-9-0
中,第二个字段为9
然后我们按$2
递增1
。另外OFS=-
以便在打印字段时-
作为分隔符包含在内,否则awk会默认将空格视为分隔符。
将其存储回变量:
$ string1=$(awk 'BEGIN{FS=OFS="-"} {$2=$2+1;}1' <<<$string1)
$ echo $string1
-10-0
$ string3=$(awk 'BEGIN{FS=OFS="-"} {$2=$2+1;}1' <<<$string3)
$ echo $string3
-1000-0-4
答案 1 :(得分:1)
使用awk
:
<强>一衬垫:强>
awk 'BEGIN{FS=OFS="="}match($2,/[0-9]+/){sub(/[0-9]+/,substr($2,RSTART,RLENGTH)+1,$2)}1' infile
或者甚至这适用于给定的输入样本
awk -F'[^[:digit:]]+' '{t=$0; sub(/-[0-9]+/,"-"$3+1,t); print t }' infile
<强>输入:强>
$ cat infile
$string1=\-9-0
$string2=\-99
$string3=\-999-0-4
<强>输出:强>
$ awk 'BEGIN{FS=OFS="="}match($2,/[0-9]+/){sub(/[0-9]+/,substr($2,RSTART,RLENGTH)+1,$2)}1' infile
$string1=\-10-0
$string2=\-100
$string3=\-1000-0-4
$ awk -F'[^[:digit:]]+' '{t=$0; sub(/-[0-9]+/,"-"$3+1,t); print t }' infile
$string1=\-10-0
$string2=\-100
$string3=\-1000-0-4
更好的可读性:
awk '
BEGIN{
FS=OFS="="
}
match($2,/[0-9]+/){
sub(/[0-9]+/,substr($2,RSTART,RLENGTH)+1,$2)
}1
' infile