2016-12-19 6 views
0

Я вижу эти строки в своем исследовании.Что делает эта команда командной строки?

$temp = 'echo $line | sed s/[a-z AZ 0-9 _]//g' 
IF($temp != '') 
    echo "Line contains illegal characters" 

Я не понимаю. Разве sed не похож на заменяющую функцию? В коде [a-z AZ 0-9 _] следует заменить на ''. Я не понимаю, как это определяет, имеет ли строка $ незаконные символы.

+0

Если все юридические символы удалены (это то, что делает 'sed'), а результат не пуст, это означает, что остались незаконные символы. – kaylum

+0

Какая оболочка? –

ответ

3

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 в список инструментов, с которыми вы должны ознакомиться, поскольку это довольно распространенный вид в командной строке.

+0

Итак, если это не пустая строка, у нее есть символы, которые не были удалены. И они не были удалены - это символы, которые не являются алфавитно-цифровыми символами, пробелами или символами подчеркивания. ohhhh Я получаю это сейчас спасибо :) –

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