找到一个字符串并添加字符串

时间:2011-10-14 06:37:03

标签: linux string add

我有多个文件......看起来像是:

ATOM   1244  O   VAL   160       7.381  11.465  -2.646   1.000  60.790   0.000
ATOM   1245  CB  VAL   160       5.766  13.870  -0.914   1.000  57.640   0.000
ATOM   1246  CG1 VAL   160       7.232  14.074  -0.568   1.000  57.530   0.000
ATOM   1247  CG2 VAL   160       5.065  15.213  -1.089   1.000  58.420   0.000
ATOM   1248  N   VAL     1     -14.324 -25.299   8.568   1.000  77.840   0.000
ATOM   1249  CA  VAL     1     -14.315 -23.826   8.346   1.000  78.450   0.000
ATOM   1250  C   VAL     1     -15.181 -23.169   9.426   1.000  76.690   0.000

现在我必须在行后添加“TER”:

ATOM   1247  CG2 VAL   160       5.065  15.213  -1.089   1.000  58.420   0.000

此行在所有文件中都相同。所以它就像我应该在所有文件中找到这一行,然后在这一行之后添加“TER”..

我认为可以通过grep或sed来搜索行。但是如何在下一行添加字符串?我根本不清楚这个代码......请帮助一下......

3 个答案:

答案 0 :(得分:0)

Sed,awk或perl是这里使用的工具。

sed有一个简短的手册页。阅读它,你将学习各种技巧。

在那里查看模式匹配,然后我认为有一个命令可以在行尾添加文本。

答案 1 :(得分:0)

尝试在shell上运行:

/usr/bin/perl -p -i -e "s/(ATOM\s+1247\s+CG2\s+VAL\s+160\s+5.065\s+15.213\s+-1.089\s+1.000\s+58.420\s+0.000)/\$1\nTER/g" my.allfiles

“ - p”导致Perl在程序周围采用以下循环,这使得迭代文件名参数有点像sed:

  1. LINE:
  2. while(<>){
  3. ......#你的节目就在这里
  4. }继续{
  5. 打印或死“-p destination:$!\ n”;
  6. }
  7. 如果由于某种原因无法打开由参数命名的文件,Perl会向您发出警告,然后转到下一个文件。请注意,线条会自动打印。打印期间发生的错误被视为致命错误。要禁止打印,请使用-n开关。 -p覆盖-n开关。

    http://perldoc.perl.org/perlrun.html

答案 2 :(得分:0)

find root-path-to-search -type f -execdir sed -r \ 
's/^(\s*ATOM\s+1247\s+CG2\s+VAL\s+160\s+5\.065\s+15\.213\s+-1\.089\s+1\.000\s+58\.420\s+0\.000\s*)$/\1\nTER\n/' {} \+