найти в Bash, в то время как цикл игнорирует первое значение итератора [duplicate]

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

$(document).ready(function(){
  //Particular Parent chield click
  $(".buttons").on("click","button",function(){
    alert("Clicked");
  });  
  
  //Dynamic event bind on button class  
  $(document).on("click",".button",function(){
    alert("Dymamic Clicked");
  });
  $("input").addClass("button");  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="buttons">
  <input type="button" value="1">
  <button>2</button>
  <input type="text">
  <button>3</button>  
  <input type="button" value="5">  
  </div>
<button>6</button>

98
задан Boldewyn 15 March 2017 в 08:52
поделиться

5 ответов

Попробуйте это:

awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE

На первой записи (строке) удалите символы спецификации. Распечатайте каждую запись.

Или немного короче, используя знание о том, что действие по умолчанию в awk должно печатать запись:

awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' INFILE > OUTFILE

1 - это самое короткое условие, которое всегда оценивает

- ADDENDUM -

Частота юникодного байта (BOM) FAQ

g0] включает следующую таблицу, в которой перечислены точные байты спецификации для каждой кодировки:

Bytes         |  Encoding Form
--------------------------------------
00 00 FE FF   |  UTF-32, big-endian
FF FE 00 00   |  UTF-32, little-endian
FE FF         |  UTF-16, big-endian
FF FE         |  UTF-16, little-endian
EF BB BF      |  UTF-8

Таким образом, вы можете видеть, как \xef\xbb\xbf соответствует байтам спецификации EF BB BF UTF-8 из приведенной выше таблицы.

106
ответ дан Heath Borders 19 August 2018 в 19:25
поделиться
  • 1
    – Boldewyn 1 July 2009 в 13:21
  • 2
    Однако это решение работает только для кодированных файлов UTF-8. Для других, например UTF-16, см. Википедию для соответствующего представления спецификации: ru.wikipedia.org/wiki/Byte_order_mark – Boldewyn 1 July 2009 в 13:36
  • 3
    Итак: awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' INFILE > OUTFILE и убедитесь, что INFILE и OUTFILE отличаются! – Steve Clay 12 February 2010 в 21:30
  • 4
    Если вы использовали perl -i.orig -pe 's/^\x{FFFE}//' badfile, вы можете положиться на свои переменные PERL_UNICODE и / или PERLIO для кодирования. PERL_UNICODE = SD будет работать для UTF-8; для других вам нужен PERLIO. – tchrist 15 August 2011 в 00:38
  • 5

Я знаю, что вопрос был направлен на unix / linux, подумал, что стоит упомянуть хороший вариант для unix-challenge (на окнах с пользовательским интерфейсом). Я столкнулся с той же проблемой в проекте WordPress (спецификация вызывала проблемы с rss-каналом и проверкой страницы), и мне пришлось изучить все файлы в довольно большом дереве каталогов, чтобы найти ту, которая была с спецификацией. Нашел приложение под названием Replace Pioneer и в нем:

Batch Runner -> Поиск (чтобы найти все файлы в подпапках) -> Replace Template -> Binary remove BOM (там это готовый шаблон поиска и замены для этого).

Это было не самое элегантное решение, и потребовалось установить программу, которая является недостатком. Но как только я узнал, что происходит вокруг, он работал как шарм (и нашел 3 файла из примерно 2300, которые были с BOM).

2
ответ дан Arnon Zamir 19 August 2018 в 19:25
поделиться
  • 1
    Я так счастлив, когда нашел ваше решение, однако у меня нет привилегии устанавливать программное обеспечение на компьютер компании. Сегодня много времени, пока не выясню альтернативу: использование Notepad ++ с плагином PythonScript. superuser.com/questions/418515/… Спасибо в любом случае! – Hoàng Long 13 May 2015 в 07:22

Использование GNU sed (в Linux или Cygwin):

# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.txt

В FreeBSD:

sed -i .bak '1 s/^\xef\xbb\xbf//' *.txt

Преимущество использования GNU или FreeBSD sed: -i означает «на месте» и будет обновлять файлы без необходимости перенаправления или странных трюков.

На Mac:

Это решение awk в другом ответе works , но команда sed выше не работает. По крайней мере, в документации Mac (Sierra) sed не упоминается поддержка шестнадцатеричного экранирования ala \xef.

Аналогичный трюк может быть достигнут с любой программой путем подключения к инструменту sponge из moreutils :

awk '…' INFILE | sponge INFILE
120
ответ дан Peter Lamberg 19 August 2018 в 19:25
поделиться
  • 1
    Я попробовал вторую команду точно в Mac OS X, и результат был «успешным», но замена фактически не выполнялась. – Trejkaz 6 December 2012 в 07:52
  • 2
    Стоит отметить, что эти команды заменяют одну конкретную последовательность байтов, которая является одним из возможных меток байтового порядка . Возможно, у вашего файла была другая последовательность BOM. (Я не могу помочь, кроме этого, поскольку у меня нет Mac) – Denilson Sá Maia 7 December 2012 в 19:04
  • 3
    Когда я попробовал вторую команду в OS X в файле, который использовал 0xef 0xbb 0xbf в качестве спецификации, на самом деле это не замена. – John Wiseman 13 October 2015 в 20:33
  • 4
    В OSX я мог бы заставить это работать только через perl, как показано здесь: stackoverflow.com/a/9101056/2063546 – Ian 19 August 2016 в 18:41
  • 5
    В OS X El Capitan 10.11.6 это не работает, но официальный ответ stackoverflow.com/a/1068700/9636 отлично работает. – Heath Borders 13 September 2016 в 15:54

Не awk, но проще:

tail -c +4 UTF8 > UTF8.nobom

Чтобы проверить спецификацию:

hd -n 3 UTF8

Если присутствует спецификация, вы увидите: 00000000 ef bb bf ...

40
ответ дан Steve Clay 19 August 2018 в 19:25
поделиться
  • 1
    Спецификации 2 байта для UTF-16 и 4 байта для UTF-32, и, конечно же, в UTF-8, конечно, нет бизнеса. – tchrist 15 August 2011 в 00:33
  • 2
    @KarolyHorvath Да, точно. Его использование не рекомендуется. Это ломает вещи. Кодирование должно быть определено протоколом более высокого уровня. – tchrist 17 March 2012 в 20:28
  • 3
    @tchrist: вы имеете в виду, что он разбивает сломанные вещи? :) надлежащие приложения должны иметь возможность обрабатывать эту спецификацию. – Karoly Horvath 17 March 2012 в 20:31
  • 4
    @KarolyHorvath Я имею в виду, что ломает лоты программ . Разве это не то, что я сказал? Когда вы открываете поток в кодировках UTF-16 или UTF-32, декодер знает, что не считать спецификацию. Когда вы используете UTF-8, декодеры представляют спецификацию в качестве данных. Это синтаксическая ошибка в бесчисленных программах. Даже декодер Java ведет себя таким образом, BY DESIGN! Спецификации в файлах UTF-8 неуместны и боль в прикладе: они являются ошибкой! Они ломают много вещей. Даже просто cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8 будет сломан. Никогда не используйте спецификацию на UTF-8. Период. – tchrist 17 March 2012 в 20:51
  • 5
    hd недоступно в OS X (начиная с 10.8.2), поэтому для проверки спецификации UTF-8 вы можете использовать следующее: head -c 3 file | od -t x1. – mklement0 12 October 2012 в 23:43

В дополнение к преобразованию концов строки CRLF в LF, dos2unix также удаляет спецификации:

dos2unix *.txt

dos2unix также преобразует файлы UTF-16 с спецификацией (но не файлы UTF-16 без спецификация) в UTF-8 без спецификации:

$ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16be>bom-utf16be
$ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16le>bom-utf16le
$ printf '\ufeffä\n'>bom-utf8
$ printf 'ä\n'|iconv -f utf-8 -t utf-16be>utf16be
$ printf 'ä\n'|iconv -f utf-8 -t utf-16le>utf16le
$ printf 'ä\n'>utf8
$ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done
bom-utf16be feff00e4000a
bom-utf16le fffee4000a00
   bom-utf8 efbbbfc3a40a
    utf16be 00e4000a
    utf16le e4000a00
       utf8 c3a40a
$ dos2unix -q *
$ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done
bom-utf16be c3a40a
bom-utf16le c3a40a
   bom-utf8 c3a40a
    utf16be 00e4000a
    utf16le e4000a00
       utf8 c3a40a
18
ответ дан user495470 19 August 2018 в 19:25
поделиться
Другие вопросы по тегам:

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