LINUX.ORG.RU
ФорумAdmin

Поиск по началу слова через grep

 


0

1

Привет друзья. Подскажите, как сделать поиск через grep по началу слова(именно слова, отделённого пробелами).

Ситуация такая, есть набор строк с текстом формата: Software version 1.2.100 Software version 2.1.200 и т.д. Так вот, мне надо найти строки с версией 1.2.* Если ищу так: grep «1.*» То в результатах поиска будут строки и с 1.2.100 и с 2.1.200, но как сделать чтобы поиск выдавал результат только 1.2.100, т.е. нужно совпадение только по началу текста. Знаю, что есть указатель на начало строки ^, но мне не подходит, т.к. строка начинается с обычного текста, а не с версии ПО.

Знаю, что есть указатель на начало строки ^

А ты это знание имеешь с рождения? Или там, где ты это почерпнул, тебя забанили?

Побереги руки, не засоряй эфир, делай так.

t184256 ★★★★★
()

как сделать поиск через grep по началу слова(именно слова, отделённого пробелами).

Ситуация такая, есть набор строк с текстом формата: Software version 1.2.100 Software version 2.1.200 и т.д.

есть набор строк

Это же одна строка. Задача поставлена некорректно.

anonymous
()

Если ищу так: grep «1.*» То в результатах поиска будут строки и с 1.2.100 и с 2.1.20

grep "1.*" | grev -v "2.1.200"

ya-betmen ★★★★★
()
$ cat test.text
Software version 1.2.100
Software version 2.1.200

$ grep "\b1\.2\." test.text
Software version 1.2.100
slowpony ★★★★★
()
Ответ на: комментарий от Oleg_Iu

Строго говоря не пробел, а любой пробельный символ...

peregrine ★★★★★
()

Если без уникодной экзотики, то

egrep -i '^(.*[ \t])?слово' file.name

berrywizard ★★★★★
()
Последнее исправление: berrywizard (всего исправлений: 1)

Обычно такие вещи решают не grep-ом, а awk. Так как сделать маску с пробелами то можно, но вот вывести только само значение версии без лишних пробелов grep-ом уже не получится. Впрочем, в этом дурацком мире, который должен из-за этого быть уничтоженным роботами пишут grep ... | awk '{print $3}' :(

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
$ grep -Po '(?<=^|\s)1\.2\S*' <<< '1.2.100 Software version 2.1.200 Software version 1.2.300 ...'
1.2.100
1.2.300

Результат выводится без предшествующих пробелов.

spirit ★★★★★
()
Последнее исправление: spirit (всего исправлений: 1)

В Вашем случае проще пользовать AWK вместо грепа с тучей шаблонов. Например: [cod]awk ’ $1 == aga { print $0 } aa.txt’ > bbb.txt[/cod]

anonymous
()
Ответ на: комментарий от spirit

Результат выводится без предшествующих пробелов.

А теперь только ровно для каждого третьего слова.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.