【问题标题】:Changing a line in multiple files更改多个文件中的一行
【发布时间】:2018-02-20 20:47:21
【问题描述】:

我有很多文件,从 file0file3100。我想在每个文件中为一行添加###

线

Generated by trjconv : PTEG1 t= 8100.00000

应该是

###Generated by trjconv : PTEG1 t= 8100.00000

每个文件中的时间(t)不同。如何一次将###添加到每个文件中,并且每个文件中的时间(t)仍然与添加之前相同?

这是我尝试过的:

#!/bin/bash

# loop all inp files in the current dir
for frameFile in frame*.inp; do
    sed -i -r -e 's/Generated by trjconv : pteg-1 t=.+/###Generated by trjconv : pteg-1 t=.+/g' ${frameFile}
fi
done

【问题讨论】:

  • 使用来自多个文件的输入行更新您的问题
  • 这是前一行: 由 trjconv 生成 : PTEG1 t= 900.00000 谐波 ,应该是这样 : # # # 由 trjconv 生成 : PTEG1 t= 900.00000 谐波
  • 问题是你需要事先比较t(time)相等性上的所有文件
  • 是的,时间不会改变每个文件中的时间。
  • 我有这个脚本,但它不起作用 #!/bin/bash # 循环当前目录中的所有 inp 文件 for frameFile in frame*.inp do sed -i -r -e ' s/由 trjconv 生成:pteg-1 t=.+/###由 trjconv 生成:pteg-1 t=.+/g' ${frameFile} fi done

标签: linux bash sed


【解决方案1】:

一个简单的 perl one liner 就可以完成这项工作:

perl -pi -e 's/Generated by trjconv : PTEG1 t=/###$&/' file*

这将在名称以file 开头的所有文件中将Generated by trjconv : PTEG1 t= 替换为###Generated by trjconv : PTEG1 t=

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2012-05-13
    • 2016-06-24
    • 2019-11-14
    • 2011-03-03
    • 2018-11-12
    相关资源
    最近更新 更多