尝试清理 Linux 机器上的日志文件,目前使用 sed

尝试清理 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 做这件事对吗?或者有更合适的方法吗?

任何帮助均感激不尽。

史蒂夫

答案1

为了能够在sed命令中扩展 shell 变量,您需要使用双引号。

您要么需要使用该-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

是的,sed 是正确的方法。

我发现您的 sed 命令中的错误是引号。如果您使用 ' 进行引用,则 $pattern 将不会被其内容替换。您应该使用 " 而不是 ' :

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

您还需要“-r”来扩展正则表达式。

并且 pattern=$pattern$val"|" 可能应该是

pattern=$pattern"|"$val

相关内容