if grep -q "�" out.txt
then
echo "working"
else
cat out.txt
fi
По сути, если файл «out.txt» содержит « » в любом месте файла, я бы хотел, чтобы он отображал «рабочий» И если файл «out.txt» НЕ содержит « » где-либо в файле, я хотел бы это кошка из .txt
РЕДАКТИРОВАТЬ: Так вот что я делаю. Я пытаюсь грубой силой расшифровать openssl.
openssl enc возвращает 0 в случае успеха, ненулевое значение в противном случае. Примечание: вы получите ложные срабатывания, потому что AES / CBC может только определить, работает ли «дешифрование» на основе правильного заполнения. Таким образом, файл расшифровывается, но он не будет правильным паролем, поэтому в нем будет бред. Общий характер в тарабарщине это " ". Поэтому я хочу, чтобы цикл do продолжал работать, если вывод содержит « ».
Вот моя git ссылка https://github.com/Raphaeangelo/OpenSSLCracker Вот сценарий
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
он все еще показывает мне вывод с charicter в нем
ОБНОВЛЕНИЕ: решено
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
долго понимает юникод (что делает его намного медленнее, поэтому поиск строк asciiLANG=C grep
- огромное улучшение производительности).How to grep for unicode � in a bash script
- это действительно то, что ты хочешь? извлечь Unicode? пожалуйста, уточните, чтобы мы могли помочь!Ответы:
grep
это неправильный инструмент для работы.Вы видите
U+FFFD REPLACEMENT CHARACTER
не потому, что оно находится буквально в содержимом файла, а потому, что вы посмотрели на двоичный файл с помощью инструмента, который должен обрабатывать только текстовый ввод. Стандартный способ обработки недопустимого ввода (т. Е. Случайных двоичных данных) состоит в замене всего, что недопустимо в текущей локали (наиболее вероятно, UTF-8), на U + FFFD до того, как оно попадет на экран.Это означает, что весьма вероятно, что литерал
\xEF\xBF\xBD
(последовательность байтов UTF-8 для символа U + FFFD) никогда не встречается в файле.grep
совершенно правильно сказать, что нет.Один из способов определить, содержит ли файл какой-либо неизвестный бинарный файл, с помощью
file(1)
команды:Для любого неизвестного типа файла это просто скажет
data
. Пытатьсяпроверить, действительно ли файл содержит произвольный двоичный файл и, следовательно, скорее всего мусор.
Если вы хотите убедиться, что
out.txt
это только текстовый файл в кодировке UTF-8, вы можете использоватьiconv
:источник
file
обнаруживает некоторый другой тип контента для этих файлов. Если 100% всегда ожидать только UTF-8 закодированных текстовых файлов, вы можете проверить сiconv
, если файл является допустимым UTF-8:iconv -f utf-8 -t utf-16 out.txt >/dev/null
. Еслиiconv
не удается преобразовать файл из-за недопустимых последовательностей UTF-8, он вернется с ненулевым кодом завершения.grep -axv '.*' badchars.txt
. Это напечатает любую строку, которая содержит недопустимый символ Unicode .file
делает.TL; DR:
длинный ответ
Оба настоящих ответа чрезвычайно вводят в заблуждение и в основном неверны.
Чтобы проверить, получите эти два файла (от очень уважаемого разработчика: Маркуса Куна):
демонстрация
Первый
UTF-8-demo.txt
- это файл, разработанный для того, чтобы показать, насколько хорошо UTF-8 способен отображать множество языков, математику, шрифт Брайля и многие другие полезные типы символов. Взгляните с помощью текстового редактора (который понимает utf-8), и вы увидите много примеров и нет�
.Тест, который предлагает один ответ: ограничение диапазона символов
\x00-\x7F
отклонит почти все внутри этого файла.Это очень неправильно и не удалит ничего, так
�
как в этом файле его нет .Использование теста, рекомендованного в этом ответе, приведет к удалению
72.5 %
файла:Это (для большинства практических целей) весь файл. Файл очень хорошо спроектирован, чтобы показать совершенно корректные символы.
Контрольная работа
Второй файл предназначен для проверки нескольких пограничных случаев, чтобы подтвердить, что читатели utf-8 делают хорошую работу. Он содержит внутри много символов, которые приведут к отображению « ». Но другая рекомендация ответа (выбранная) использовать
file
не удается с этим файлом. Только удаление нулевого byte (\0
) (который технически является действительным ASCII) и\x7f
байта (DEL - delete) (который также явно является символом ASCII) сделает весь файл действительным дляfile
команды:Не только не
file
удается обнаружить много неправильных символов, но также не удается обнаружить и сообщить, что это файл в кодировке UTF-8.И да,
file
способен обнаруживать и сообщать кодированный в UTF-8 текст:Кроме того,
file
не в состоянии сообщить как ASCII большинство контрольных символов в диапазоне от 1 до 31. Он (file
) сообщает о некоторых диапазонах какdata
:Другие как
ASCII text
:В качестве диапазона печатных символов (с символами новой строки):
Но некоторые диапазоны могут привести к странным результатам:
Программа
file
является не инструментом для обнаружения текста, а для обнаружения магических чисел в исполняемых программах или файлах.Обнаруженные диапазоны
file
, и соответствующий тип сообщения, который я обнаружил, были:Однобайтовые значения, в основном ascii:
Utf-8 кодированные диапазоны:
Одно из возможных решений лежит ниже.
Предыдущий ответ.
Значение Unicode для персонажа, которого вы публикуете:
Да, это Unicode-символ «ЗАМЕНЯЮЩИЙ ХАРАКТЕР» (U + FFFD) . Это символ, используемый для замены любого недопустимого символа Unicode, найденного в тексте. Это «наглядное пособие», а не настоящий персонаж. Чтобы найти и перечислить каждую полную строку, содержащую недопустимые символы UNICODE, используйте:
но если вы хотите только определить, является ли какой-либо символ недопустимым, используйте:
Если в результате
1
файл чистый, иначе будет ноль0
.Если вы спрашивали, как найти
�
персонажа, используйте это:Или, если ваша система правильно обрабатывает текст UTF-8, просто:
источник
grep -axv '.*'
!! Я боролся с несколькими плохими символами в моих текстовых файлах, и как исправить их в emacs, в течение десяти или двух лет !!!Этот очень ранний ответ был для оригинального сообщения, которое было:
Пытаться
со
if .. then
следующим заявлением:Explanation💡:
-P
,--perl-regexp
: PATTERN является регулярным выражением Perl-o
,--only-matching
: показать только часть строки, соответствующую PATTERN[^\x00-\x7F]
является регулярным выражением для соответствия одному не-ASCII символу[[:ascii:]]
- соответствует одному символу ASCII[^[:ascii:]]
- соответствует одному не-ASCII-символув
bash
источник
printf '%b' "$(printf '\\U%x' {128..131})" | grep -oP "[^\x00-\x7F]"
просто 4 действительных символа Unicode, которые ваш код отклоняет. :-(