grep - 用同一组数字替换一组不同的数字

grep - 用同一组数字替换一组不同的数字

我是 grep 的新手,我想知道如何执行以下操作:我有一个包含约 1000 行的文件,采用这种格式

assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.1 0.8 0.8

assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.4 0.9 0.9 

我想将末尾的数字更改为以下内容:

4.6 2.6 2.6 ! 

我有什么办法可以做到这一点吗?每行中的数字都不同,我试图使它们全部一致并添加“!”在每行的末尾。

提前致谢!

答案1

grep用于打印匹配和打印文件中的数据。要替换数据,有sed

sed 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file

这将替换每行末尾的所有数字,无论4.6 2.6 2.6 !它们是什么或有多少。

要就地编辑文件:

sed -i 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file

输出:

assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !

assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !

答案2

另一种解决方案,这次用于awk进行文本处理:

awk '{gsub(/([[:digit:]]\.[[:digit:]] ?){3}$/,"4.6 2.6 2.6 !")}1' file

.这(也)用您指定的字符串替换行末尾的三倍“digit”“”“digit”(可能还有空格)的模式。

输出(再次)

assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !

assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !

请注意,所使用的语法并不完全可移植;mawk例如不理解重复计数的构造,因此您可能不得不求助于{number}

awk '{gsub(/[0-9]\.[0-9] [0-9]\.[0-9] [0-9]\.[0-9]$/,"4.6 2.6 2.6 !")}1' file

如果您正在使用这样的实现awk

相关内容