Я пытаюсь найти строку (номер строки 6), которая похожа на
"password": "......."
в файле, в котором все строки начинаются с «все, что здесь»: «....»
Затем я хочу извлечь все, что написано после :
подпишите и удалите все лишние слова и символы: "пароль": "" и возьмите ....... часть между кавычками.
Я хочу определить ее как новую переменную (здесь я назову ее user1), потому что позже я хочу заменить эту переменную новой командой в том же сценарии для получения веб-адреса.
Я использовал эту команду, но она не работает:
user1=`head -6| grep -v "\<"password:"\>" myfile.txt`
wget '....$user1&......
Кто-нибудь может мне помочь? Я работаю над этим несколько дней, но не могу решить эту проблему.
Предположим, что файл данных ('файл'), содержимое которого:
$ cat afile
now
is
the
time
for
"password": "all good men"
to
come
to
the
aid
of
their
country
Затем следующая строка Bash находит строку с «паролем»:
затем извлекает содержимое между кавычками:
$ user1=$(cat afile | grep '^[[:blank:]]*"password"[[:blank:]]*:' | sed 's/^[[:blank:]]*"password":[[:blank:]]*//' | sed 's/"//g')
$ echo $user1
all good men
Если вы знаете, что убедитесь, что данная строка расположена точно на строке 6, тогда также работает следующее:
$ user1=$(cat afile | sed '6!d' | sed 's/^[[:blank:]]*"password":[[:blank:]]*//' | sed 's/"//g')
$ echo $user1
all good men
Попробуйте:
user1=$(
sed -n '
6!d; # disregard any line but the 6th one
s/^[[:blank:]]*"password"[[:blank:]]*:[[:blank:]]*"\(.*\)".*/\1/p
q' myfile.txt
)
Если вы хотите, чтобы $user1
передавался как GET-параметр CGI, вам нужно сделать %XX
кодировку в нем.
С ksh93
вы можете сделать:
wget "http://host.example/cgi-bin/script?user1=$(printf '%#H' "$user1")"
С другими оболочками вы можете прибегнуть к perl
, чтобы сделать экранирование URI:
uri_escape() {
perl -MURI::Escape -le 'print map {uri_escape $_} @ARGV' -- "$@"
}
wget "http://host.example/cgi-bin/script?user1=$(uri_escape "$user1")"
Или использовать curl
вместо wget
, который может сам кодировать параметры:
curl -G -O --data-urlencode "user1=$user1" 'http://host.example/cgi-bin/script'