簡體   English   中英

AWK:AWK(兩種模式之間的打印)無法按預期工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM