Bash 替换 tail -f 后的前 4 个字符

Bash replace first 4 characters after tail -f

我有一个 .txt 日志文件,我希望其中的前四个字符替换为 ****XXXX 以匿名化数据。

我是运行以下命令:

tail -f file.txt

我知道我可以按以下方式剪切第一个字符:

tail -f file.txt | cut -c4-

但我想插入四个通配符。

我怎样才能做到这一点?

echo 1234567890 | sed 's/..../****/'

输出:

****567890

要连续跟踪文件的前四个字符匿名化,可以使用以下命令:

tail -f file.txt | sed 's/^..../****/'

如果您有一个已完成写入的文件,并且您希望立即匿名化其中的所有数据,您可以按如下方式使用 sed:

sed -i 's/^..../****/g' 58486880.txt

请注意,第二个命令适用于 GNU/Linux sed,但不适用于 BSD/MacOS sed。

因为问题和标题不匹配,要替换最后四个,您必须这样使用 $

tail -f tmp.txt | sed 's/.\{4\}$/****/'

测试:

 while true; do cat <(seq 1 10 | tr -d '\n') <(echo) >> tmp.txt; sleep 1; done

这会产生:

1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****
1234567****