Если мы используем команду grep с '\<string\>' результат будет абсолютным. Например:

File1:

test
test2
1test

Если мы используем cat File1 | grep test вывод будет:

test 
test2 
1test

Но если мы хотим получить только первую строку, мы должны выполнить grep '\<test\>' .

Вот вопрос: как использовать эти символы с переменной в скрипте? Пример:

cat file1 | grep '/<$1/>'

Но эта команда не работает.

2 ответа2

1

Одинарные кавычки не допускают расширения переменных. Таким образом, '$1' будет буквальным $1 . Вместо этого вы хотите двойные кавычки. Смотрите эту запись в вики о цитатах для более.

$ foo=test
$ grep "\<$foo\>" file1
test

Обратите внимание, что <\ and \> также можно заменить на границы слов:

$ grep "\b$foo\b" file1
test    

Вам также не нужно cat файл в grep - он может читать файл самостоятельно.

1

Вы ищете -w чтобы соответствовать словам:

$ grep -w 'test' File1
test

Если у вас есть информация в переменной, просто используйте ее обычно с двойными кавычками, как уже объяснил slhck:

$ var="test"
$ grep -w "$var" File1
test

От man grep:

-w
--word-регулярное_выражение

Выберите только те строки, которые содержат совпадения, которые образуют целые слова. Тест состоит в том, что соответствующая подстрока должна быть либо в начале строки, либо предшествовать не состоящему из слова символу. Точно так же, он должен быть либо в конце строки, либо следовать за символом, не входящим в состав слова. Составляющие слова символы - это буквы, цифры и знак подчеркивания. Эта опция не имеет эффекта, если -x также указан.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .