Попытка чистить файлы журнала на машине Linux, в настоящее время использование sed

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

Я надеялся сделать эквивалент этого:

#!/usr/bin/bash
pattern=""
for val in 'sed -e 's/.*=//' Client_clean.txt
do
      pattern=$pattern$val"|"
done
#egrep -e $pattern $1
sed -i 's/$pattern/CLIENT/g' $1
exit 0

Прокомментированный egrep хорошо работает, sed, не делает.

Действительно ли я прав использовать sed для этого? Или есть ли более способный маршрут для взятия?

Любая справка ценится.

Steve

1
задан 21.02.2011, 20:13

2 ответа

Смочь развернуть переменную оболочки в sed команда, необходимо использовать двойные кавычки.

Любой необходимо использовать -r опция к sed или предшествуйте символам вертикальной черты с обратными косыми чертами.

Также необходимо постараться не добавлять символ вертикальной черты в конце. Если у Вас будет он там, то пустые строки будут подобраны.

#!/usr/bin/bash
pattern=""
delim=""
for val in 'sed -e 's/.*=//' Client_clean.txt
do
      pattern=$pattern$delim$val
      # setting delim after its first use and using it before the new value
      # results in "foo|bar|baz" instead of "foo|bar|baz|"
      delim='|'
done
sed -ri "s/$pattern/CLIENT/g" "$1"
2
ответ дан 12.12.2019, 10:35

Да, sed является способом пойти.

Что я вижу неправильно в Вашей команде sed, кавычки. $pattern не будет заменен, он - содержание, если Вы используете 'для заключения в кавычки. Вместо того, чтобы использовать' необходимо использовать ":

sed -ri "s/$pattern/CLIENT/g" $1

Вам также нужен "-r" для расширенных регулярных выражений.

И $pattern$val pattern=" |" должен, вероятно, быть

pattern=$pattern"|"$val
1
ответ дан 12.12.2019, 10:35

Теги

Похожие вопросы