LINUX.ORG.RU

регулярное выражение

 


0

1

Всем привет.

Что-то туплю я с поведением простого выражения. Надо: просто получить 4 символа в конце одного выражения. Что может быть проще? Но почему мне этот вариант:

echo "hello_world_release-0003-1-g8dc5266" |  sed -e 's/\(....\)$/\1/'

выдаёт hello_world_release-0003-1-g8dc5266 ? Вот такой вариант, например, работает без проблем:

velik@sve:/home/TMP/$ echo "hello_world_release-0003-1-g8dc5266" |  sed -e 's/.*\(....\)$/\1/'                                       
5266

Где я туплю? Разве \(....\)$ не означает, что не надо 4 символа с конца строки?

Всем спасибо, velik


Где я
туплю?
Разве \(....\)$ не означает, что не надо 4 символа с конца строки?

1.ЛОР 2. Да 3. Четыре точки это четыре любых символа

anonymous
()

Во-первых:

.{4}
Во-вторых, в первом случае ты заменишь только строки ровно из четырёх символов, другие естественно останутся в первозданном виде. man sed.

Kalashnikov ★★★
()

s - замена. Ты меняешь 4 последних символа... на 4 последних символа, получая ту же строку. Ее и выводишь.

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

Фу блин, ну конечно! Надо показать, что меняю всю строку на найденный в конце 4 символа (блок). Таки туплю ;-)

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

В третьих

 \{4\}

А теперь сравни, что легче читается:

sed -e 's/.*\(.\{4\}\)$/\1/'

или

sed -e 's/.*\(....}\)$/\1/'

И на конец: man sed

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

Шелопроблемы. Ни то, ни другое не читается. Да и вообще, глупо спорить о читаемости регэкспов или седа, а тем более и того и другого вместе. (..............................) тоже легче читается?

В твоём случае вообще \d по-моему надо, да с шаблоном остальной строки.

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

Синтаксис базовых регулярных выражений на данный момент определён POSIX как устаревший, но он до сих пор широко распространён из соображений обратной совместимости.

Эпитомия шелопроблем.

Kalashnikov ★★★
()
28 апреля 2014 г.
Ответ на: комментарий от anarquista

Но такая команда будет выводить и строки менее 4 символов длиной :(

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