Найти и удалить синтаксис

SHIFT -JIS может кодировать довольно неразборчивые вещи,

% cat phrase
?k?????? ???????????? ???????? ?????? ?????????????? ????????????????????.
% hexdump -C phrase
00000000  82 6b 82 89 82 8b 82 85  20 82 91 82 95 82 89 82  |.k.............|
00000010  8c 82 8c 82 93 20 82 95  82 90 82 8f 82 8e 20 82  |..............|
00000020  94 82 88 82 85 20 82 86  82 92 82 85 82 94 82 86  |...............|
00000030  82 95 82 8c 20 82 90 82  8f 82 92 82 90 82 85 82  |...............|
00000040  8e 82 94 82 89 82 8e 82  85 2e 0a                 |...........|
0000004b
% iconv -f SHIFT-JIS -t UTF-8 < phrase 
Like quills upon the fretful porpentine.

Изображения также необходимы для решения проблем с кодированием, так как некоторые программы отображения будут «тофу» отображать текст (белыми прямоугольниками ), в то время как другие отображают его просто нормально, или могут быть различные другие разногласия по поводу того, как вещи отображаются только изображение поможет прояснить (ну, изображение и шестнадцатеричный дамп...)

tofu or not

Они взяты из полноширинного диапазона Unicode , который начинается примерно с U+FF01. Еще больше удовольствия можно получить с The Confusables .

Путь к этому безумию

Сначала вам потребуются некоторые средства для генерации текста в нестандартных -диапазонах Юникода либо с помощью автоматизации, либо путем склеивания фраз вручную. Вот конвертер, который берет диапазон a-zA-Zи переводит их в полный диапазон ширины:

#!/usr/bin/env perl
use 5.24.0;
use warnings;

die "Usage: not-ascii...\n" unless @ARGV;

my $s = '';
for my $c ( split //, "@ARGV" ) {
    if ( $c =~ m/[a-z]/ ) {    # FF41
        $s.= chr( 0xFF41 + ord($c) - 97 );
    } elsif ( $c =~ m/[A-Z]/ ) {    # FF21
        $s.= chr( 0xFF21 + ord($c) - 65 );
    } else {
        $s.= $c;
    }
}
binmode *STDOUT, ':encoding(UTF-8)';
say $s;

Затем мы можем растянуть нашего Шекспира на полную ширину и закодировать его с помощью SHIFT -JIS:

% not-ascii 'Like quills upon the fretful porpentine.' \
| iconv -f UTF-8 -t SHIFT-JIS > phrase

SHIFT -Было обнаружено, что JIS можно использовать для этой цели, выполняя перебор -принудительного преобразования ввода UTF -8 во все кодировки, перечисленные iconf -l. Большинство других кодировок не очень интересны,или не удалось преобразовать UTF -8:

#!/bin/sh
IFS=' '
iconv -l | while read e unused; do
   printf "$e "
   printf "test phrase\n" | iconv -f UTF-8 -t "$e"
done

хотя вам действительно нужна программа для просмотра шестнадцатеричных данных, чтобы проверить результаты:

%./brutus-iconv > x
iconv: (stdin):1:0: cannot convert
iconv: (stdin):1:0: cannot convert
iconv: (stdin):1:0: cannot convert

iconv: (stdin):1:4: cannot convert
iconv: (stdin):1:0: cannot convert
% hexdump -C x
00000000  41 4e 53 49 5f 58 33 2e  34 2d 31 39 36 38 20 74  |ANSI_X3.4-1968 t|
00000010  65 73 74 20 70 68 72 61  73 65 0a 55 54 46 2d 38  |est phrase.UTF-8|
00000020  20 74 65 73 74 20 70 68  72 61 73 65 0a 55 54 46  | test phrase.UTF|
00000030  2d 38 2d 4d 41 43 20 74  65 73 74 20 70 68 72 61  |-8-MAC test phra|
...

0
13.12.2020, 23:00
2 ответа

find. -type -f 'AFP_Afpinfo' -deleteневерно или даже недействительно -перед AFP_Afpinfoдолжно предшествовать -nameили -iname, и тогда будут сопоставляться файлы, полное имя которых точно соответствуетAFP_Afpinfo(регистру -нечувствительно, в случае-iname).

Если вы хотите найти файлы, имена которых заканчиваются на _AFP_Afpinfo, но только в тех случаях, когда им не предшествует точка, вы можете сделать это либо с помощью

find -type f -name '*[^.]_AFP_Afpinfo'

где [^.]означает любой символ, кроме .или использующий

find -type f \( -name '*_AFP_Afpinfo' ! -name '*._AFP_Afpinfo' \)

Они не совсем эквивалентны -последнее выражение будет соответствовать _AFP_Afpinfo, тогда как первое требует, по крайней мере, один не -символ точки перед строкой.

В любом случае, я настоятельно советую сначала протестировать -printвместо -delete.

3
18.03.2021, 22:43

Нет, это не так.

Советы:

проверить

Попробуйте с -printвместо -delete.

.в имени файла нет специального

.не является особым :это просто обычный символ. В DOS и CP/M он особенный, но вы их не используете. В MS -подстановочные знаки Windows CMD, оканчивающиеся на .*, являются специальными:

  • n.*делаетn
  • поэтому n.*.*делает n.*, а *.*.*делает*.*
  • все это происходит из наследия CP/M/DOS, где *.*означало все файлы (все файлы имели в себе ..
  • эта культура все еще существует, и многие думают, что .для Unix особенная. Это не так, это просто символ (, за исключением случаев, когда это первый символ имени файла -).
0
18.03.2021, 22:43

Теги

Похожие вопросы