[英]Curl and xargs in piped commands
我想处理密码为纯文本(逗号分隔; passwd是csv文件中导出数据库的cv文件中的第5个字段)的旧数据库,以对它们进行加密,以供dokuwiki进一步使用。 这是我的bash命令(在那里有grep和sed可以从curl输出中提取加密的passwd):
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:不匹配的单引号; 缺省情况下,除非使用-0选项,否则引号对xargs来说是特殊的
并且仅处理文件的第一行,然后不追加任何内容。
使用-0选项并使用引号不能解决任何问题。 我在命令行哪里错了? 也许使用更高级的语言会更适合执行此操作。
谢谢LM的帮助
通常,如果您有这么长的命令,最好在出现问题时将其拆分。 通过管道:
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><your_docuwiki_root>/conf/users.auth.php</tt>
这可能不是您所期望的。
sed -e 's/tt//g' |
sed -e 's/<[^>]*>//g'
不过,这将删除html-tags
sed 's/<tt>//;s/<.tt>//'
会做同样的。
所以我会说错误的awk
和过多的xargs
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.