LINUX.ORG.RU

grep «\</» someFile

 ,


0

1

Нужно решить тривиальную задачу - вывесть строки из файла, где присутствует полный адрес к какому-либо файлу в системе (т.е. /...), для этого прописал регулярное выражение «\</» (символ начала слова, а затем /). Но, видимо, в такой конструкции символ / интерпретиуется как-то иначе. Прошу подсказать, почему не работает выражение и какая конструкция будет правильной для решения этой задачи.



Последнее исправление: jack_in_the_hat (всего исправлений: 2)

Первый раз вижу такое обозначение начала строки, если честно. :)

strangeman@strangepc:~$ cat test
/
/etc
etc
etc/
strangeman@strangepc:~$ grep ^/ test
/
/etc
strangeman ★★★★
()
Последнее исправление: strangeman (всего исправлений: 1)
Ответ на: комментарий от jack_in_the_hat

А зачем вы тогда пытались именно так сделать? :)

И как вы узнаете, что это именно адрес, а не, например, знак комментирования '//'?

Выработайте четкие параметры, тогда и получится нарисовать нужную регулярку.

strangeman ★★★★
()
Последнее исправление: strangeman (всего исправлений: 2)
Ответ на: комментарий от strangeman

Прошу прощения, опечатался. Символ \< обозначает начало слова, а не строки. Эти нюансы я безусловно учту, но проблема остается, почему не выводятся строка, скажем «someText /etc» при регулярном выражении «\</».

jack_in_the_hat
() автор топика
Ответ на: комментарий от jack_in_the_hat

Символ \< обозначает начало слова

Тоже впервые слышу. Границы слов это \b и \B. В вашем случае нужно писать grep '\B/' file.

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

Можно вот так объехать это ограничение.

grep -E '[[:blank:]]/|^/' test

Но это тоже не панацея. Не пройдет тогда parameter=/etc

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

Почти:

strangeman@strangepc:~$ cat test
/
/etc
parameter=/etc
etc/
parameter /etc
./etc

strangeman@strangepc:~$ grep '\B/' test
/
/etc
parameter=/etc
parameter /etc
./etc

Последний, очевидно, ТСу тоже не нужен.

strangeman ★★★★
()
Последнее исправление: strangeman (всего исправлений: 3)
Ответ на: комментарий от jack_in_the_hat

Не совсем. Относительные пути, начинающиеся с точки эта регулярка тоже захватывает. :)

strangeman ★★★★
()

Задача нетривиальная, т.к. Любая строка является относительным путем, если не начинается с /, и абсолютным, если начинается с него. Рассмотренные частные случам не решение, т.к. ни экранированные, ни raw-варианты сложных случаев не покрывают. Тебе надо сузить определение пути до того, что можно разобрать и тогда разбирать.

Ugly\ dirname\ /some\ file

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

Так начало слова в vim обозначается

OxiD ★★★★
()

ничего не понятно, приведи пример файла и то, что из него надо выдернуть

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