Bash 如何用一个更高的数字替换一个数字
我有一个用于macOS的bash脚本,它将文档第一行的最后一个字符(数字)替换为数字加1。例如,如果数字是19,它将被替换为20(我知道代码只替换最后一个字符)。以下是我目前拥有的代码:Bash 如何用一个更高的数字替换一个数字,bash,macos,sed,Bash,Macos,Sed,我有一个用于macOS的bash脚本,它将文档第一行的最后一个字符(数字)替换为数字加1。例如,如果数字是19,它将被替换为20(我知道代码只替换最后一个字符)。以下是我目前拥有的代码: #出于某种原因,这里需要-e(而不是-e) RC01=$(sed-ne“1s/*\(.\)$/\1/p./document) RC02=${RC01} 让“RC02++” sed-i'-n“1s/${RC01}/${RC02}/”/document 当最后一行运行时,如果文档的第一行上有任何内容,它将清除整个
#出于某种原因,这里需要-e(而不是-e)
RC01=$(sed-ne“1s/*\(.\)$/\1/p./document)
RC02=${RC01}
让“RC02++”
sed-i'-n“1s/${RC01}/${RC02}/”/document
当最后一行运行时,如果文档的第一行上有任何内容,它将清除整个文档
出了什么问题,我如何修复它?您当前的问题是
sed-n
抑制所有输出行的打印
您可以通过删除-n
轻松解决此问题
RC01=$(sed-n“1s/*\(.\)$/\1/p./document)
RC02=${RC01}
让“RC02++”
sed-i“”“1s/${RC01}\$/${RC02}/”/document
这仍然存在一个问题,即只增加最后一位数字;如果你的数字不止一个数字,这将导致像18、19、110、111这样的怪异,而不是18、19、20、21
RC01=$(sed-n“s/\(.[^0-9]\)\([0-9]*\)$/\2/p;q./document)
RC02=${RC01}
让“RC02++”
sed-i“”“1s/${RC01}\$/${RC02}/”/document
sed
的-i
功能在替换文件时很难被击败。如果不是因为这个,我肯定会推荐Awk。这里有一个快速的尝试
awk'NR==1{$NF=1+$NF}1'/document>/document.tmp&&
mv./document.tmp./document
Perl兼备了这两个方面的优点,糖是最重要的
perl-pi-e的/(\d+)$/1+$1/e如果$==1./文件
您当前的问题是sed-n
抑制所有输出行的打印
您可以通过删除-n
轻松解决此问题
RC01=$(sed-n“1s/*\(.\)$/\1/p./document)
RC02=${RC01}
让“RC02++”
sed-i“”“1s/${RC01}\$/${RC02}/”/document
这仍然存在一个问题,即只增加最后一位数字;如果你的数字不止一个数字,这将导致像18、19、110、111这样的怪异,而不是18、19、20、21
RC01=$(sed-n“s/\(.[^0-9]\)\([0-9]*\)$/\2/p;q./document)
RC02=${RC01}
让“RC02++”
sed-i“”“1s/${RC01}\$/${RC02}/”/document
sed
的-i
功能在替换文件时很难被击败。如果不是因为这个,我肯定会推荐Awk。这里有一个快速的尝试
awk'NR==1{$NF=1+$NF}1'/document>/document.tmp&&
mv./document.tmp./document
Perl兼备了这两个方面的优点,糖是最重要的
perl-pi-e的/(\d+)$/1+$1/e如果$==1./文件
sed
是一项要求吗?类似于awk
的操作可能会变得更简单。@0x5453 awk是否能正常工作,并且在macOS/OS X 10.11-11.0上也能正常工作?您确实想只替换最后一个字符,以便19后面的下一个数字是110吗?我没有想过。我想替换行末尾的数字,因此19将变为20@TripleEawk将比sed
优越得多,是的,包括在macOS上。“sed
是一项要求吗?类似于awk
的操作可能会变得更简单。@0x5453 awk是否能正常工作,并且在macOS/OS X 10.11-11.0上也能正常工作?您确实想只替换最后一个字符,以便19后面的下一个数字是110吗?我没有想过。我想替换行末尾的数字,因此19将变成20@TripleEawk将比sed
好得多,是的,包括在macOS上。'willRC01=$(sed-n“2s/\(.[^0-9]\)\([0-9]*\)$/\2/p;q“/document)
用于查找第二行末尾的数字吗?我尝试了第一行的确切答案,但是注意到您没有在/s之前添加任何内容(例如1)。我不确定如果我在它前面加了一个2或不同的数字,它是否还能工作。我重新组织它,在打印后退出,所以行号对于第一行来说是多余的。所以,是的,更正,仅仅添加行号是不起作用的。试试2!Ds/\(.[^0-9]\)\([0-9]*\)$/\2/p;q
最后一行,sed-i''2s/${RC01}\$/${RC02}/'/document
将按原样工作,对吗?是的,这应该可以直接工作。一些没有-i'
的实验应该有助于证明这一点。如果RC01=$(sed-n“2s/\(.[^0-9]\)\([0-9]*\)$/\2/p;q“/document)
能够找到第二行末尾的数字吗?我尝试了第一行的确切答案,但注意到你没有在/s前面放任何东西(比如1)。我不确定如果我在它前面加了一个2或不同的数字,它是否还能工作。我重新组织它,在打印后退出,所以行号对于第一行来说是多余的。所以,是的,更正,仅仅添加行号是不起作用的。试试2!Ds/\(.[^0-9]\)\([0-9]*\)$/\2/p;q
最后一行,sed-i''2s/${RC01}\$/${RC02}/'/document
将按原样工作,对吗?是的,这应该可以直接工作。一些没有-i'
的实验有望有助于证明这一点。