此代码搜索网站 html 文件并提取域名列表...
httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | grep -iEo '[[:alnum:]-]+\.(com|net|org)'
结果如下所示。
- 域名1.com
- domain2.com
- domain3.com
我计划在非常大的网站上使用此代码,因此这将生成一个非常大的域名列表。另外,上面的代码会生成很多重复的域名。因此,我设置了一个具有唯一字段的 mysql 数据库,这样就不会插入重复项。
利用我有限的编程知识,我将下面的这一行代码组合在一起,但这不起作用。当我执行该命令时,没有出现任何错误,只是出现一个新的命令提示符 > 和一个闪烁的光标。我假设我没有使用正确的语法或方法,和/或者我想要做的事情可能无法通过命令行实现。非常感谢任何帮助。
httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | domain=“$(grep -iEo '[[:alnum:]-]+\.(com|net|org)’)” | mysql -pPASSWORD -e "INSERT INTO domains.domains (domains) VALUES ($domain)”
是的,我的数据库名称是domains,我的表名称是domains,我的字段名称是domains。
最佳答案
从INSERT的MySQL语法来看:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name,…)]
[(col_name,…)]
{VALUES | VALUE} ({expr | DEFAULT},…),(…),…
…
您需要将域名转换为括号、引号、逗号分隔的项目:
('domain1.com'),('domain2.com'),…
然后将此列表附加到您生成的 INSERT 语句的末尾。
httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" |
grep -iEo '[[:alnum:]-]+\.(com|net|org)’ |
sort -u |
sed -e "s/.*/,('&')/" -e '1s/,/INSERT IGNORE INTO domains.domains(domain) VALUES /' |
mysql -pPASSWORD
sort -u
确保名称是唯一的。第一个 -e
到 sed
将一行内容(例如 domain1.com
)转换为 ,('domain1.com)
;第二个 -e
删除第一行的逗号(由第一个 -e
添加),并将其替换为 INSERT
前缀。 INSERT
语句中的 IGNORE
表示如果表中已存在域,则新条目将被忽略。
显然,如果生成的域数量对于 MySQL 中的有效 SQL 语句来说太大,则您必须对数据进行一些拆分,但您可能能够一次处理几千个域。时间。
关于mysql - 如何将这个复杂的命令行 grep 语句的结果推送到 mysql 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23850269/