我是 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
。