我有超过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-perl
Debian软件包。A必须有的。
也可以通过cpan -i File::Slurp
安装
我会利用awk
或perl
来完成这项任务;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
文件中生成一个随机单词,将其附加到行尾,然后将其替换为匹配。