다음과 같은 행(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