Какое из следующих вариантов использования привязки является правильным в регулярном выражении с использованием grep?

Я обнаружил, что решением было отредактировать параметр загрузки, щелкнув e и добавить nomodeset в конец строки, начинающейся с linuxefi .

1
12.04.2016, 14:11
2 ответа

Если вы поместите "^" вне кавычек, ваша оболочка может интерпретировать это как перенаправление. Цитирование позволяет избежать этой проблемы. Это считается устаревшим, но вы можете найти его, например, в журнале изменений для рыбы :

Каретка ^ теперь выполняет перенаправление stderr только в том случае, если это первый символ. токена, что делает пользователей git счастливыми # 168

Дополнительная литература:

Вы можете использовать каретку, '^' вместо символа вертикальной черты '|'. Это происходит от основного предшественника, оболочки Томпсона. (Исключением является оболочка Версии 8, которая не имеет широкого распространения, в которой эта функция была удалена при очистке дизайна.)

1
27.01.2020, 23:35

Не должно быть никакой разницы между командами. Они обе работают одинаково:

$ set -x  ## turn on debugging info

$ /bin/grep ^'\<that\>' file.txt
+ /bin/grep '^\<that\>' file.txt

$ /bin/grep '^\<that\>' file.txt
+ /bin/grep '^\<that\>' file.txt

Как вы можете видеть выше, в обеих версиях выполняется одно и то же.

Тем не менее, как правило, всегда безопаснее хранить все регулярное выражение внутри кавычек, поэтому используйте:

/bin/grep '^\<that\>' file.txt

Хотя в этом случае это не имеет значения, это имеет огромное значение, если ваше регулярное выражение включает знак, значимый для оболочки. Например:

grep ;'foo' file

Здесь оболочка интерпретирует ; как управляющий символ и запускает две команды: grep (без аргументов) и 'foo' file .

1
27.01.2020, 23:35

Теги

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