次の行(6行目)を見つけようとしています。
"password": "......."
line で始まるすべてのファイルから"whatever here": "...."
その後、記号の後に書かれた内容を抽出し、追加の単語と文字の両方を削除したいと思います:
。 "password": "" と引用符の間に ........ 部分を取得します。
後でこの変数を同じスクリプトの新しいコマンドに置き換えてURLを取得したいので、これを新しい変数(ここではuser1と命名しました)として定義したいと思います。
このコマンドを使用しましたが、動作しません。
user1=`head -6| grep -v "\<"password:"\>" myfile.txt`
wget '....$user1&......
誰でも私を助けることができますか?私はこれを数日間調べてきましたが、これはわかりません。
答え1
努力する:
user1=$(
sed -n '
6!d; # disregard any line but the 6th one
s/^[[:blank:]]*"password"[[:blank:]]*:[[:blank:]]*"\(.*\)".*/\1/p
q' myfile.txt
)
CGI GETパラメータに渡すには、そのパラメータをエンコードする$user1
必要があります。%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
代わりにwhichを使用してパラメータwget
を直接エンコードします。
curl -G -O --data-urlencode "user1=$user1" 'http://host.example/cgi-bin/script'
答え2
データファイル( 'afile')の内容が次のとおりです。
$ cat afile
now
is
the
time
for
"password": "all good men"
to
come
to
the
aid
of
their
country
次に、Bashの次の行はその行を見つけて、引用符の間に"password":
ある内容を抽出します。
$ 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