使用 grep 向 vim 发送参数

使用 grep 向 vim 发送参数

我看见这个问题但我无法实现我所寻找的东西。

这是我想要的:

  • 我有一个文件,其中有几行以 结尾4.1.01.97(所有行的数字相同 - 但数字可能会不时更改)
  • 我想打开 vim 并将数字更改为另一个

我尝试过,vim [file_name] +:%s/97/98/g +:wq效果很好,但如果文件发生变化就无济于事了。

我接下来尝试使用以下命令获取所需的数字grepcat [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

相关内容