if grep -q "�" out.txt
then
echo "working"
else
cat out.txt
fi
Fondamentalement, si le fichier "out.txt" contient " " n'importe où dans le fichier, je voudrais qu'il fasse écho à "working" ET si le fichier "out.txt" ne contient PAS " " n'importe où dans le fichier, alors je voudrais à cat out.txt
EDIT: Alors, voici ce que je fais. J'essaie de forcer brutalement un déchiffrement openssl.
openssl enc renvoie 0 en cas de succès, différent de zéro sinon. Remarque: vous obtiendrez des faux positifs car AES / CBC ne peut déterminer que si le "décryptage fonctionne" en fonction du bon remplissage. Donc, le fichier se déchiffre mais ce ne sera pas le bon mot de passe, il y aura donc du charabia. Un caractère commun dans le charabia est " ". Je veux donc que la boucle do continue si la sortie contient " ".
Voici mon lien git https://github.com/Raphaeangelo/OpenSSLCracker Voici le script
while read line
do
openssl aes-256-cbc -d -a -in $1 -pass pass:$line -out out.txt 2>out.txt >/dev/null && printf "==================================================\n"
if grep -q "�" out.txt
then
:
else
cat out.txt &&
printf "\n==================================================" &&
printfn"\npassword is $line\n" &&
read -p "press return key to continue..." < /dev/tty;
fi
done < ./password.txt
il me montre toujours la sortie avec le charicter dedans
MISE À JOUR: Résolu
printf "Working..."
while read line
do
openssl aes-256-cbc -d -a -in $1 -pass pass:$line -out out.txt 2>out.txt >/dev/null
if file out.txt | grep -q 'out.txt: ASCII text'
then
printf "\n==================================================\n\n" &&
cat out.txt &&
printf "\n==================================================" &&
printf "\npassword is $line\n" &&
read -p "press return key to continue..." < /dev/tty;
else
:
fi
done < ./password.txt
grep
comprend depuis longtemps unicode (ce qui le rend beaucoup plus lent, donc pour rechercher des chaînes ascii, aLANG=C grep
est une énorme amélioration des performances).How to grep for unicode � in a bash script
est-ce vraiment ce que vous voulez? extraire l'unicode? veuillez clarifier afin que nous puissions vous aider!Réponses:
grep
n'est pas le bon outil pour le travail.Vous voyez le
U+FFFD REPLACEMENT CHARACTER
non pas parce qu'il est littéralement dans le contenu du fichier, mais parce que vous avez regardé un fichier binaire avec un outil qui est censé gérer uniquement les entrées textuelles. La manière standard de gérer les entrées non valides (c'est-à-dire les données binaires aléatoires) consiste à remplacer tout ce qui n'est pas valide dans les paramètres régionaux actuels (probablement UTF-8) par U + FFFD avant qu'il n'apparaisse à l'écran.Cela signifie qu'il est très probable qu'un littéral
\xEF\xBF\xBD
(la séquence d'octets UTF-8 pour le caractère U + FFFD) ne se produise jamais dans le fichier.grep
a tout à fait raison de vous le dire, il n'y en a pas.Une façon de détecter si un fichier contient un binaire inconnu est avec la
file(1)
commande:Pour tout type de fichier inconnu, il dira simplement
data
. Essayerpour vérifier si le fichier contient vraiment des fichiers binaires arbitraires et donc très probablement.
Si vous voulez vous assurer qu'il
out.txt
s'agit bien d'un fichier texte encodé en UTF-8, vous pouvez également utilisericonv
:la source
file
un autre type de contenu pour ces fichiers. Si vous 100% toujours seulement attendre UTF-8 fichiers texte codé, vous pouvez vérifier aveciconv
, si un fichier est UTF-8 valide:iconv -f utf-8 -t utf-16 out.txt >/dev/null
. Siiconv
ne peut pas convertir le fichier en raison de séquences UTF-8 invalides, il reviendra avec un code de sortie non nul.grep -axv '.*' badchars.txt
. Cela imprimera toute ligne contenant un caractère Unicode non valide .file
passe.TL; DR:
longue réponse
Les deux réponses actuelles sont extrêmement trompeuses et fondamentalement erronées.
Pour tester, obtenez ces deux fichiers (d'un développeur très réputé: Markus Kuhn):
Démo
Le premier
UTF-8-demo.txt
est un fichier conçu pour montrer à quel point UTF-8 est capable de présenter de nombreuses langues, mathématiques, braille et de nombreux autres types de caractères utiles. Jetez un oeil avec un éditeur de texte (qui comprend utf-8) et vous verrez beaucoup d'exemples et non�
.Le test que propose une réponse: limiter la plage de caractères à
\x00-\x7F
rejettera presque tout ce qui se trouve dans ce fichier.C'est très faux et n'en supprimera aucun
�
car il n'y en a pas dans ce fichier .L'utilisation du test recommandé dans cette réponse supprimera
72.5 %
le fichier:Il s'agit (à des fins plus pratiques) de l'ensemble du dossier. Un fichier très bien conçu pour montrer des caractères parfaitement valides.
Tester
Le deuxième fichier est conçu pour essayer plusieurs cas de frontière afin de confirmer que les lecteurs utf-8 font du bon travail. Il contient à l'intérieur de nombreux caractères qui feront apparaître un ' '. Mais l'autre recommandation de réponse (celle sélectionnée) à utiliser
file
échoue grossièrement avec ce fichier. Seule la suppression d'un octet zéro (\0
) (qui est techniquement valide ASCII) et d'un\x7f
octet (DEL - supprimer) (qui est clairement un caractère ASCII également) rendra tout le fichier valide pour lafile
commande:Non seulement ne parvient
file
pas à détecter les nombreux caractères incorrects, mais également à détecter et à signaler qu'il s'agit d'un fichier codé UTF-8.Et oui,
file
est capable de détecter et de signaler du texte encodé en UTF-8:Également,
file
ne signale pas en ASCII la plupart des caractères de contrôle compris entre 1 et 31. Il (file
) signale certaines plages commedata
:D'autres comme
ASCII text
:En tant que plage de caractères imprimables (avec sauts de ligne):
Mais certaines plages peuvent provoquer des résultats étranges:
Le programme
file
n'est pas un outil pour détecter du texte, mais pour détecter des nombres magiques dans des programmes ou fichiers exécutables.Les plages
file
détectent et le type correspondant signalé que j'ai trouvé était:Valeurs d'un octet, principalement ascii:
Plages codées Utf-8:
Une solution possible se trouve ci-dessous.
Réponse précédente.
La valeur Unicode du personnage que vous publiez est:
Oui, c'est un caractère Unicode 'CHARGEUR DE REMPLACEMENT' (U + FFFD) . Il s'agit d'un caractère utilisé pour remplacer tout caractère Unicode non valide trouvé dans le texte. C'est une "aide visuelle", pas un vrai personnage. Pour rechercher et répertorier chaque ligne complète contenant des caractères UNICODE non valides, utilisez:
mais si vous voulez seulement détecter si un caractère n'est pas valide, utilisez:
Si le résultat est que
1
le fichier est propre, sinon il sera nul0
.Si ce que vous demandiez était: comment trouver le
�
personnage, alors utilisez ceci:Ou si votre système traite correctement le texte UTF-8, simplement:
la source
grep -axv '.*'
!! J'ai eu du mal avec quelques mauvais caractères dans mes fichiers texte, et comment les corriger dans emacs, pendant une décennie ou deux !!!Cette réponse très précoce était pour le poste d'origine qui était:
Essayer
avec une
if .. then
déclaration comme suit:Explication💡:
-P
,--perl-regexp
: PATTERN est une expression régulière Perl-o
,--only-matching
: affiche uniquement la partie d'une ligne correspondant au MOTIF[^\x00-\x7F]
est une expression régulière pour correspondre à un seul caractère non ASCII.[[:ascii:]]
- correspond à un seul caractère ASCII[^[:ascii:]]
- correspond à un seul caractère non ASCIIdans
bash
la source
printf '%b' "$(printf '\\U%x' {128..131})" | grep -oP "[^\x00-\x7F]"
seulement 4 caractères Unicode valides que votre code rejette. :-(