与えられた行番号のパターンに基づいてデータを抽出します。

与えられた行番号のパターンに基づいてデータを抽出します。

次の行(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'

おすすめ記事