2016-03-20 4 views
1

Я работаю над проектом и задаюсь вопросом об этой команде в частности.Shell Scripting | tr -d ' [] _'

tr -d '\[\]\_' 

Я знаю, что флаг -d удаляет все символы, соответствующие критериям регулярного выражения внутри, но я не уверен, что это говорит выражение. Является ли это удалить все специальные символы, такие как «!" [] \ И такой? Или, что эта команда?

tr -cd "[[:alnum:]\n ]" 

Спасибо заранее!

+0

Удаляет все квадратные скобки и символы подчеркивания. – SLePort

+0

Для приложения wordcount, есть ли причина, почему это необходимо? –

+0

Возможно, нет, поскольку скобки и '_' не являются частью слов. – SLePort

ответ

2

echo "][][_word[]_" | tr -d '\[\]\_' выходы word

обратный слэш убегают скобки, потому что они являются специальными символами в выражениях регулярных выражений, поэтому эта команда просто удаляет все [] и _ символов из строки.

Однако tr -d '[]_' достаточно, потому что tr не использует регулярное выражение.

+0

'tr' не использовать регулярное выражение. – SLePort

+0

'tr -d '[] _'' будет достаточно. –

+0

он должен удалить все специальные символы, такие как «!» [] \ –

2

tr -d '\[\]\_' удаляет квадратные скобки и символы подчеркивания со стандартного ввода.

Спасаясь [, ] и _ бесполезно здесь, поскольку эти символы не имеют особого значения с tr, они всегда будут обрабатываться как литералы.

Отметьте, что trне использует регулярные выражения.

От человека странице:

Формат аргументов SET1 и SET2 напоминает формат регулярных выражений; однако они не являются регулярными выражениями, а только списками символов.

[:alnum:] матчи буквенно-цифровые символы (эквивалент 0-9A-Za-z), так что ничего не делать со специальными символами.

+0

Как вы отметили в своем комментарии, 'tr' не использует регулярное выражение, поэтому также escape-код' [] 'бесполезен:' tr -d '[] _'' будет иметь тот же эффект. Диапазоны символов не нужны квадратные скобки в 'tr', поэтому' tr -d '[az]' 'совпадает с' tr -d '[] a-z''. –

+1

@BenjaminW Спасибо за ваш драгоценный комментарий. Я смутился с синтаксисом диапазона символов. Я обновил – SLePort

+0

, удалив все специальные символы, такие как '! "[] \ –