【问题标题】:Curl and xargs in piped commands管道命令中的 curl 和 xargs
【发布时间】:2017-08-13 09:55:44
【问题描述】:

我想处理一个旧数据库,其中密码是纯文本(逗号分隔;passwd 是导出数据库的 csv 文件中的第 5 个字段)以加密它们以供 dokuwiki 进一步使用。这是我的 bash 命令(grep 和 sed 用于从 curl 输出中提取加密密码):

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

【问题讨论】:

    标签: bash awk


    【解决方案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-tags,虽然

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

    也会这样做。

    所以我会说一个错误的awk 和一个xargs 太多了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2018-12-11
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多