2017-08-13 113 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太多。