Grep с "полу" -точным совпадением - PullRequest
1 голос
/ 04 октября 2009

Я пытаюсь использовать grep для сопоставления с регистром, подобным этому:

У меня есть список имени хоста и ips в этом формате:

238-456 192.168.1.1
ak238-456 192.168.1.2
238-456a 192.168.1.3
458-862 192.168.1.4

Теперь я пытаюсь получить grep "238-456", но, конечно, это возвращает:

238-456 192.168.1.1

и ...

ak238-456 192.168.1.2

и ...

238-456a 192.168.1.1

но мне нужна строка точно с 238-456. В этом случае я не могу использовать -x, потому что тогда, конечно, он не возвращает результатов.

Есть ли простой способ решить эту проблему?

Приведенные ответы с «^» решают первую проблему. Но не тот, с «а» в конце. Может ли somenone помочь с этим?

Ответы [ 3 ]

5 голосов
/ 04 октября 2009

В этом конкретном примере вы можете искать ^238-456, который соответствует только тогда, когда нужный текст встречается в начале строки. Для более общего решения узнайте о регулярных выражениях (пример которых приведен).

редактирование:

Для вашей новой проблемы вы можете просто включить пробел вручную, выполнив поиск "^238-456 ". Есть также некоторые классы регулярных выражений для пробелов. "^238-456\>" должно работать здесь. \> обозначает границу слова, и вам, вероятно, нужно включить кавычки. Граница другого слова - \<, так что вы можете изменить целое на "\<238-456\>", и это уберет зависимость от него в начале строки.

2 голосов
/ 04 октября 2009

используйте awk

awk '$1=="238-456"' file
0 голосов
/ 04 октября 2009

Вы можете использовать регулярные выражения:

egrep "^238-456"

следует сделать, прося проверить с начала строки.

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

...