Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何用一个更高的数字替换一个数字_Bash_Macos_Sed - Fatal编程技术网

Bash 如何用一个更高的数字替换一个数字

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 当最后一行运行时,如果文档的第一行上有任何内容,它将清除整个

我有一个用于macOS的bash脚本,它将文档第一行的最后一个字符(数字)替换为数字加1。例如,如果数字是19,它将被替换为20(我知道代码只替换最后一个字符)。以下是我目前拥有的代码:

#出于某种原因,这里需要-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上。'will
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'
的实验应该有助于证明这一点。如果
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'
的实验有望有助于证明这一点。