2017-02-17 4 views
2

У меня есть пример кода, и там, кажется, часть дополнительного форматирования пришитой к концу некоторой обработки текста:Что делает tr -d [=, =]?

tr -d [=,=] 

Я не знаю, что это делает и страница человека для tr имеет мало Помогите. Любое понимание того, что это делает?

+4

мне нравится [=, =] –

+0

Кстати, выражение должно быть заключено в кавычки чтобы быть безопасным - как '' [=, =] ''- в противном случае оболочка может заменить его именем файла в виде результата glob (например, если у вас есть файл с именем', '), перед вызовом' tr'. –

ответ

6

С man tr страницы,

[= эквив =]

Классы эквивалентности

Синтаксис [=C=] расширяется, чтобы все символы, которые эквивалентны C, в произвольном порядке. Классы эквивалентности являются относительно недавним изобретением, предназначенным для поддержки неанглийских алфавитов. Но, похоже, нет стандартного способа определить их или определить их содержимое. Поэтому они не полностью реализованы в GNU tr; класс эквивалентности каждого символа состоит только из этого символа, который не имеет особого значения.

Пример из POSIX tr страницы

В этом примере используется класс эквивалентности, чтобы определить диакритические варианты базового символа 'e' в file1, которые лишенная diacritical marks (WikiLink) и записываются в file2.

tr "[=e=]" "[e*]" <file1 >file2 

т.е. если в файла1, если e представлен как акцентировано (либо é или è), они рассматриваются как нормальные e

+2

Более интересно, интересно, какие символы считаются эквивалентными запятой в этом случае :) – chepner

+0

@chepner: Yup искал вокруг, чтобы увидеть возможные синтаксисы, не мог найти много о нем. Или, как правило, действительно была скудная информация об классе эквивалентности. Вы знаете кое-что? будет рад обновить здесь. – Inian

+1

Это может быть просто класс эквивалентности. Для удовольствия я попробовал «эхо»? »; | tr -d '[=? =]' ', но второй символ, U + 037E GREEK QUESTION MARK, не был удален. Вероятно, мне нужен локаль, где такие классы эквивалентности определены, и я просто не использую такую ​​локаль. – chepner

-3

Он просто удалит запятую между ==. проверьте ниже выход.

%[email protected]> echo "1==,==2==,==3=,=4=,=5" | tr -d [=,=] 
1====2====3==4==5 
%[email protected]> 

спасибо.

+1

Это не объясняет «эхо» 1,2,3,4,5 "| tr -d [=, =] '. – chepner

+0

'tr' оценивает каждый символ независимо от его контекста. Окружающий контент не влияет на поведение. –

Смежные вопросы