使用sed将文件中的单词替换为txt中的随机单词



我有超过500个站点,我想用文本文件中的随机单词替换所有站点中的特定单词。

文件夹结构
www
- site1
- - idex.html
- site2
- - index.html
-site3
- - index.html

字名:Dashemd

Txt文件内容一行一个世界,像这样:

Hemd.txt:
Blue
Red
Pink
Green
More …

所以我需要用hemd.txt文件中的单词列表随机替换所有文件夹index.html中的单词dashemd

你能帮帮我吗?

我尝试用静态单词替换,但我不能用txt文件中的随机单词做这个

find ./ -type f -exec sed -i -e 's/dashemd/newworld/g' {} ;

替换每个重复的"dashemd">词:

find ./ -type f -name '*.html' -exec perl -i -MFile::Slurp -pe '
my @words = split /n/, read_file("Hemd.txt");
s/dashemd/$words[rand(@words)]/g;
' -- {} +

你需要File::Slurp模块,libfile-slurp-perlDebian软件包。A必须有的。
也可以通过cpan -i File::Slurp安装

我会利用awkperl来完成这项任务;perl是最简单的一个:

find www -iname '*.html' -exec perl -i.orig -slpe '
BEGIN {
open FD, "<", $toFile;
chomp(@toArr = <FD>);
close(FD);
exit 1 if $fromStr eq "" or @toArr == 0;
}
s/$fromStr/$toArr[rand(@toArr)]/g
' -- -fromStr=dashemd -toFile=Hemd.txt -- {} +

这可能适合您(GNU sed, parallel和utils):

find . -name index.html |
parallel -q sed -Ei ':a;/dashemd/{x;s/.*/shuf hemd.txt | head -1/e;x
G;s/dashemd([^n]*)n(.*)/21/;ta}' {}

将每个index.html的结果管道到sed调用中。

对于文件中出现的dashemd,从hemd.txt文件中生成一个随机单词,将其附加到行尾,然后将其替换为匹配。

相关内容

最新更新