Mac 上的批处理文件,对一堆文件进行了更改

Batch file on Mac that makes a change to a bunch of files

我是制作批处理文件的新手,感谢您对这个可能非常简单的问题的帮助

我在一堆目录中有一堆文件,像这样:

dir-1/index.html
dir-2/index.html
dir-3/index.html
...
dir-150/index.html

每个文件在 HTML 中包含文本 "Replace with second column" 和 "Replace with third column"

然后,我有一个包含三列信息的 tsv 文件,如下所示:

dir-1        dog          cat     
dir-2        mouse        frog
dir-3        circus       clown
...
dir-150      last         one

我正在尝试批量编辑每个 index.html 文件,用第 2 列中的数据替换文本 "Replace with second column",用第 3 列中的数据替换 "Replace with third column",对于第 1 列中列出的特定目录。关于如何在 UNIX/Mac OSX?

中执行此操作的任何想法

假设 changes.tab 具有制表符分隔值,如您上面的示例(而不是您所说的逗号分隔),这应该让您开始:

#!/bin/sh

cat changes.tab | while read line; do
    TARGETDIR="`echo "$line" | awk -F"\t" '{ print  }'`"
    COL2="`echo "$line" | awk -F"\t" '{ print  }'`"
    COL3="`echo "$line" | awk -F"\t" '{ print  }'`"

    if [ -d "$TARGETDIR" ]; then
        cat "$TARGETDIR/index.html" |
        sed "s/Replace with second column/$COL2/g" |
        sed "s/Replace with third column/$COL3/g" > temp
        mv temp "$TARGETDIR/index.html"
    fi
done

根据您的特定需求进行测试和调整。另请注意,这会替换目标文件,因此请先制作一份安全副本。