Извлечь данные на основе шаблона по заданному номеру строки

Я пытаюсь найти строку (номер строки 6), которая похожа на

"password": "......."

в файле, в котором все строки начинаются с «все, что здесь»: «....»

Затем я хочу извлечь все, что написано после : подпишите и удалите все лишние слова и символы: "пароль": "" и возьмите ....... часть между кавычками.

Я хочу определить ее как новую переменную (здесь я назову ее user1), потому что позже я хочу заменить эту переменную новой командой в том же сценарии для получения веб-адреса.

Я использовал эту команду, но она не работает:

 user1=`head -6| grep -v "\<"password:"\>" myfile.txt`

 wget '....$user1&......

Кто-нибудь может мне помочь? Я работаю над этим несколько дней, но не могу решить эту проблему.

-2
06.03.2017, 21:36
2 ответа

Предположим, что файл данных ('файл'), содержимое которого:

$ 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
0
28.01.2020, 05:16

Попробуйте:

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'
2
28.01.2020, 05:16

Теги

Похожие вопросы