sed
- средство редактирования потока, которое применяет регулярные выражения для преобразования ввода. Команда
sed s/regex/replace/g
читает из стандартного ввода и каждый раз, когда он находит что-то соответствующее regex
, он заменяет его с содержимым replace
. В вашем случае, команда
sed s/[a-z A-Z 0-9 _]//g
имеет [a-z A-Z 0-9]
в качестве регулярного выражения и пустой строкой в качестве его замены. (Вы забыли тире между A и Z?) Это означает, что все, что соответствует указанному регулярному выражению, удаляется. Это регулярное выражение означает «любой символ, который либо между a
и z
между A
и Z
, между 0
и 9
, пробел или знак подчеркивания,» поэтому эта команда по существу удаляет любые буквенно-цифровые символы, пробелы, подчеркивания из входных и отвалов что осталось на stdout. Проверяя, является ли выход пустым, спрашивает, есть ли там какие-либо символы, не были буквенно-цифровыми, пробелами или цифрами, как работает код.
Я бы порекомендовал добавить sed
в список инструментов, с которыми вы должны ознакомиться, поскольку это довольно распространенный вид в командной строке.
Если все юридические символы удалены (это то, что делает 'sed'), а результат не пуст, это означает, что остались незаконные символы. – kaylum
Какая оболочка? –