我看见这个问题但我无法实现我所寻找的东西。
这是我想要的:
- 我有一个文件,其中有几行以 结尾
4.1.01.97
(所有行的数字相同 - 但数字可能会不时更改) - 我想打开 vim 并将数字更改为另一个
我尝试过,vim [file_name] +:%s/97/98/g +:wq
效果很好,但如果文件发生变化就无济于事了。
我接下来尝试使用以下命令获取所需的数字grep
:cat [file_name] | tail -1 | grep -E '.[0-9][0-9]$'
我想在我的 vim 命令中使用这个结果...就像vim [file_name] +:%s/97/98/g +:wq
在 `` 里面使用 grep 命令,而不是97
。
我怎样才能做到这一点?
如果不用 vim 也能做到这一点,那也会很有帮助 :)
另外,我的 grep 正则表达式可以改进吗?
该文件如下所示:
A_,4.1.01.97
B_,4.1.01.97
C_,4.1.01.97
D_,4.1.01.97
E_,4.1.01.97
F_,4.1.01.97
G_,4.1.01.97
H_,4.1.01.97
我想要的文件如下所示:
A_,4.1.01.98
B_,4.1.01.98
C_,4.1.01.98
D_,4.1.01.98
E_,4.1.01.98
F_,4.1.01.98
G_,4.1.01.98
H_,4.1.01.98
答案1
您可以使用sed
:
sed 's/97/98/g' /path/to/file.txt
用于sed -i
修改文件而不是打印到标准输出:
sed -i 's/97/98/g' /path/to/file.txt
编辑:
因为您也想知道您的正则表达式是否可以改进,所以这里建议您获取行末尾的最后一个数字:
tail -1 /path/to/file.txt | grep -o '[0-9]\{1,\}$'
如果您想要获取文件中所有行末尾的最高整数,您可以:
grep -o '[0-9]\{1,\}$' /path/to/file.txt | sort -n | tail -1
您可以在文件中按如下方式替换它:
sed -i 's/[0-9]\{1,\}$/<your replacement here>/g' /path/to/file.txt
后续编辑:
您可以使用这个衬垫:
pattern=`tail -1 /path/to/file.txt | grep -o '[0-9]\{1,\}$'` && sed -i "s/[0-9]\{1,\}$/${pattern}/" /path/to/file.txt