[英]AWK: Trouble with AWK (print between two patterns) not working as expected
我試過搜索但沒有找到我正在尋找的答案。 對於這種情況,我有以下腳本:
#!/bin/bash
CONN="mysql://username:password1@hostname/database_name"
echo "Connection:\t${CONN}"
PW=$(echo ${CONN} |awk '/username:/,/@/')
echo "Username:\t${PW}"
我正在嘗試將PW的新變量設置為password1的值。
有什么我想念的嗎?
你這里不需要awk。 只是BASH足夠好了:
conn="mysql://username:password1@hostname/database_name"
[[ "$conn" =~ username:(.*)@ ]] && pw="${BASH_REMATCH[1]}"
echo "$pw"
password1
就這樣做:
TMP="${CONN##*:}" //Delete all characters from the head till the last ':'
CONN="${TMP%%@*}" //Delete all characters from the tail till the last '@'
你在CON中有密碼1
就個人而言(可能不是最好的選擇),我會使用cut
來做到這一點:
PW=$(echo -e ${CONN} | cut -d":" -f3 | cut -d"@" -f1)
運行它產生:
Connection: mysql://username:password1@hostname/database_name
Username: password1
注意:如果您要在echo
使用\\
,請確保使用-e
選項
您嘗試使用的語法:
awk '/username:/,/@/'
將在包含username
的LINE和包含@
的LINE之間找到LINES。 它不是要在一行內的分隔符之間找到一個字符串。 嘗試:
sed 's/.*username:\(.*\)@.*/\1/'
代替。 它不是很強大,但它可能是您需要的所有特定輸入。
恕我直言,你應該使用@ Ko2r的解決方案。
另一個Bash:
CONN="mysql://username:password1@hostname/database_name"
IFS=:@ read UN PW __ <<< "${CONN#*//}"
echo "$UN" ## Outputs username
echo "$PW" ## Outputs password1
兼容性:Bash 2.05b或更新版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.