2017-08-13 83 views
0

我想处理一个旧的数据库,其中的密码是纯文本(逗号分隔; passwd是在CSV文件中的第5场在数据库已远销)隐窝他们通过DokuWiki的进一步使用。这里是我的bash命令(grep和SED在那里提取加密后的passwd从卷曲输出):卷曲和xargs的在管道命令

cat users.csv | awk 'FS="," { print $4 }' | xargs -l bash -c 'curl -s --data-binary "pass1=$0&pass2=$0" "https://sprhost.com/tools/SMD5.php" -o - ' | xargs | grep -o '<tt.*tt>' | sed -e 's/tt//g' | sed -e 's/<[^>]*>//g' 
  • 我从xargs的下面的评论

    xargs的:无与伦比的单引号;默认报价是特殊到xargs的,除非你使用-0选项

  • 而且只有文件的第一行进行处理,然后就没有追加。

使用-0选项,并玩弄引号,并不能解决任何问题。我在命令行中错在哪里?可能是更先进的语言将会更适合做到这一点。

感谢帮助,LM

回答

1

在一般情况下,如果有命令,这么长的管道,它是更好,如果出问题来分割。通过你的管道:

cat users.csv | 

没有什么意外的。

awk 'FS="," { print $4 }' | 

您可能想要做awk 'BEGIN {FS=","} { print $4 }'。尝试管道中的前两个命令,看看它们是否产生了正确的答案。

xargs -l bash -c 'curl -s --data-binary "pass1=$0&pass2=$0" "https://sprhost.com/tools/SMD5.php" -o - ' | 

这里没有错,尽管可能有更好的方法来做MD5散列。

xargs | 

这是什么xargs在管道中做?它应该被删除。

grep -o '<tt.*tt>' | 

注意,这会产生两行:

<tt>$1$17ab075e$0VQMuM3cr5CtElvMxrPcE0</tt> 
<tt>&lt;your_docuwiki_root&gt;/conf/users.auth.php</tt> 

这可能不是你所期望的。

sed -e 's/tt//g' | 
sed -e 's/<[^>]*>//g' 

这将删除HTML标签,虽然

sed 's/<tt>//;s/<.tt>//' 

将这样做。

所以我说一个错误的awkxargs太多。