2015-01-21 2 views
0

Я новичок, чтобы сделать пакетные файлы и ценим вашу помощь с тем, что, вероятно, является довольно простой вопросПакетный файл на Mac, который вносит изменения в кучу файлов

Я получил кучу файлов в куча каталогов, например:

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

Каждый файл включает в HTML текст «Заменить второй колонке» и «Заменить на третьей колонке»

Тогда у меня есть TSV файл с тремя колонками информация, например:

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

Я пытаюсь выполнить редактирование каждого из файлов index.html, чтобы заменить текст «Заменить на второй столбец» данными в столбце 2 и «Заменить третьим столбцом» данными в столбце 3 , для конкретного каталога, указанного в столбце 1. Любые идеи о том, как это сделать в UNIX/Mac OSX?

ответ

1

Предполагая changes.tab это имеет значения, разделенные табуляцией, как ваш пример выше (а не запятую, как вы утверждаете), это поможет вам начать:

#!/bin/sh 

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

    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 

теста и настройки для ваших конкретных потребностей. Кроме того, обратите внимание, что это заменяет целевые файлы, , поэтому сначала сделайте копию безопасности.

+1

спасибо! именно то, что мне нужно. Вы правы, это был tsv, я обновил свой оригинальный пост. Я понял, что мне нужно создать index.html в каждом каталоге (он еще не существует), поэтому я добавил 'cp index.html '$ TARGETDIR" 'в качестве первой строки цикла if – Adam

+0

Отлично - рад, что у вас есть рабочий решение. – Jef

Смежные вопросы