Я пытаюсь анонимизировать свои логи Apache через 7 дней, и на самом деле у меня уже есть проблемы с написанием скрипта для анонимизации.

Мой скрипт заменяет 3 первые цифры на X и он работает правильно при запуске файла журнала в том же каталоге, что и скрипт bash.

Но я хотел бы использовать подстановочный знак для анонимности всех журналов из моих поддоменов, например:

./anonym /basedir/*/logs/access.log

Но это не работает должным образом.

Вот мой сценарий:

#!/bin/bash

while IFS='' read -r line || [[ -n "$line" ]]; do
        echo "$line"  | sed s/./X/1 | sed s/./X/2 |sed s/./X/3
done < "$1">"/tmp/$1"

mv "/tmp/$1" "$1"

Спасибо за любую помощь.

2 ответа2

1

Чтобы выполнить одни и те же действия для нескольких файлов, вам нужно заключить код в цикл, например:

#!/bin/bash

tmpfile=/tmp/anon.$$

for path; do
    while IFS='' read -r line || [[ -n "$line" ]]; do
        echo "$line" | sed -e s/./X/1 -e s/./X/2 -e s/./X/3
    done < "$path" > "$tmpfile"

    mv "$tmpfile" "$path"
done
0

Поскольку в конце концов вы пишете в один и тот же файл, просто используйте sed -i (хотя это не POSIX). От man 1 sed:

-i[SUFFIX] , --in-place[=SUFFIX]
редактировать файлы на месте (делает резервную копию, если расширение предоставлено). Режим работы по умолчанию - разорвать символические и жесткие ссылки. Это можно изменить с помощью --follow-symlinks symlinks и --copy .

Кроме того, следующее выражение sed может заменить ваши три отдельных: s/.../XXX/ . В общем, это не совсем эквивалентно, может быть, вы хотите улучшить его. В любом случае, используя -i все, что вам нужно сделать, это:

sed -i `s/.../XXX/` /basedir/*/logs/access.log

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .