Почему я получаю “недопустимое макс. количество” от grep в псевдониме?

[112261] Использование команды [112773]sort[112774], вероятно, будет самым быстрым вариантом.

Но, скорее всего, вы захотите исправить локаль так, чтобы C.

sort -u[112776] не сообщал об уникальных строках, но по одной из каждого набора строк, которые сортируются одинаково. В локали C 2 разные строки обязательно не сортируются одинаково, но это не так в большинстве локалей на основе UTF-8 в системах GNU.

  • Кроме того, использование локали C позволяет избежать накладных расходов, связанных с разбором UTF-8 и обработкой сложных порядков сортировки, так что это значительно улучшило бы производительность. Так что:
  • Вы также можете улучшить производительность, используя более быстрый диск (или диск, отличный от того, на котором находятся входные и/или выходные файлы) для временных файлов (используя [112777]-T[112778] или [112779]$TMPDIR[112780] переменную окружения), или возясь с опцией [112781]-S[112782], поддерживаемой некоторыми реализациями [112783]сортировки [112784]).
  • Для некоторых типов входных данных или для медленного хранения данных использование опции [112785]--compress-program[112786] в GNU [112787]sort[112788] (например, с помощью [112789]lzop[112790]) может улучшить производительность в дополнение к использованию хранилища.
Теперь просто примечание для тех, кто возражает (в какой-то степени справедливо), что [113363] это не будет правильным порядком

  • :
  • Я согласен, что как человек, я хотел бы видеть [113197]Стефана[113198] сортировкой между [113199] Стефана[113200] и [113201] Стефани[113202], но:

Компьютер [113365] [113366] хотел бы, чтобы [113367]Стефан[113368] сортировал после [113369]é[113370] (по крайней мере, когда он выражен как U+00E9) символ или байты его кодировки UTF-8 сортируются после (в терминах кодовой точки или значения байта). Такой порядок сортировки очень прост в реализации и является [113371]строгим полным порядком [113372] и не вызывает удивления.

Порядок сортировки в вашем регионе, скорее всего, не будет удовлетворительным во многих случаях даже для человека. Например, в моей системе со стандартной локалью en_GB.utf8:

Stéphane[113480] и [113481]Stéphane[113482] (один с U+00E9, другой с eU+0301) сортируются не так:

$ printf '%b\n' 'Ste\u0301phane' 'St\u00e9phane' | сортируются -u. Стефан Стефан

но ③, ①, ② все равно сортирует (очевидно, ошибка в этих определениях местопребывания¹):

$ printf '%s\n' ③ ① ② | сорт -u. ③ Вот, это ③, но с тем же успехом могли бы быть ① или ②Так что IMO, есть шанс, что вы всегда захотите [113207] сортировать -u[113208] с LC_ALL=C, если хотите уникальные строки. А если вы хотите, чтобы получившийся список сортировался в порядке сортировки пользователя, то отправьте его в [113209]сортировку[113210] еще раз:

LC_ALL=C сортировка -u | сортировка LC_ALL=Сортировка | LC_ALL=C uniq -c | сортировка -k2

¹ [113213]2019 edit[113214]. порядок ① ② ③ ④ ⑤... с тех пор зафиксирован в новых версиях GNU libc, но с 2,30 более 95% символов до сих пор не имеют установленного порядка, можно заменить ① ② ③ ④ ⑤, например, на

2
12.04.2015, 10:45
2 ответа

После долгого поиска я нашел ответ: https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/documentation/networking/alias.txt

выглядит как интерфейсы виртуального / псевдонима устаревают и следует избегать, и нужно предпочесть добавлять несколько IP-адресов непосредственно в eth0

-121--244201-

Удалите пробел в конце определения псевдонима (как предложено RICI), и ваша проблема должна быть исправлена.

Но; В таких случаях, как у вас, где у вас есть не только синонимы или сокращения в вашем псевдоним, но и функциональный код с трубами, лучше определить функцию вместо псевдонима.

0
27.01.2020, 22:12

Похоже, что GD также является псевдонимами, и это расширяется до -M и что-то. Чтобы проиллюстрировать:

$ alias alg='alias | grep '
$ alias gd='-m foo'
$ alg gd
grep: invalid max count

Сообщение об ошибке, которое вы показываете, - это то, что принты Prints принты, когда он дан опцию -M (MAX Count) и не численный аргумент. Если вы запустите псевдоним | GREP GD , держу пари, вы увидите, что он совпадает с тем, что я показал выше.

Как объяснено в Man Bash :

Если последний символ значения псевдонима представляет собой пространство или вкладку символом, то следующее командное слово, следующее с псевдонимами, также проверяется для расширения псевдонима.

Итак, удаление пространства из ALG псевдоним следует также исправить его.

Кроме того, вы уверены, что ~ / .bash_aliases.sh даже читается? Имя файла ~ / .bash_aliases без расширения. Если вы не явно источники ~ / .bash_aliases.sh Он будет игнорироваться.

2
27.01.2020, 22:12

Теги

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