【问题标题】:Bash script to Edit all用于编辑所有内容的 Bash 脚本
【发布时间】:2014-11-07 00:35:16
【问题描述】:

我无法准确找到我正在寻找的东西,所以我想我会问。我正在寻找一种方法来执行以下操作:

  1. 扫描包含编号目录 (25-109) 的目录
  2. 扫描那些编号目录内的目录
  3. 在所有名为“map.inp”的文件中找到包含以下文本的行:“MAP_93= A 93 A”
  4. 将所有匹配项更改为“MAP_93= A 93 V”

通常我会手动执行此操作,但在它们自己的目录中大约有一千个文件需要编辑。我找到了一个 linux 方案来实现这一点,但我不确定如何使用具有相同功能的 Bash 脚本。需要修改的文件都同名map.inp。

路径都在目录 jan10 中,但在子目录中,如下所示:

/user/jan10/100/100A/map.inp
/user/jan10/99/99A/map.inp

等等

我发现的 linux 方案是这样工作的:

 find /user/jan10/ \
 name map.inp \
 exec sed -i~ 's/MAP_93=   A   93 A\+/MAP_93=   A   93 V/' {} \;

所需的输入将是:

MAP_89=   A   93 A

还有输出:

MAP_93=   A   93 V 

有没有人知道如何做到这一点?如果不清楚,我深表歉意,

【问题讨论】:

    标签: linux bash sed


    【解决方案1】:

    您忘记在上述find 命令中的nameexec 参数之前添加-

    find /user/jan10/ -name "map.inp" -exec sed -i 's/MAP_89=   A   93 A\+/MAP_93=   A   93 V/' {} \;
    

    【讨论】:

    • 在 sed 正则表达式部分使用空格时要小心。
    猜你喜欢
    • 2018-10-29
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多