Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: bash и grep спецсимволы  (Прочитано 3609 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
bash и grep спецсимволы
« : 04 Март 2014, 22:21:01 »
Есть файл file.txt. Нужно отобразить все строки, которые содержат символы, отличные от цифр, англ. букв, пробела, а также `~!@#$%^&*()_+=-[]\{}|\\;':"<>?,./
Тоесть все, которые с точки зрения оффтоп-пользователя можно набрать на клавиатуре (кроме русских букв). Делаю так:
cat file.txt | grep -v '^[0-9 A-Za-z`~!@#$%^&*()+_=\[\]\\|:"\',./<>?-]*$'На что получаю приглашение PS2. ЧЯДНТ?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5629
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #1 : 04 Март 2014, 22:29:38 »
Тире должно быть первым символом в ряду
| по-моему должно быть экранировано
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #2 : 04 Март 2014, 22:32:57 »
Azure,
cat file.txt | grep -v '^[-0-9 A-Za-z`~!@#$%^&*()+_=\[\]\\\|:"\',./<>?]*$'Тоже самое.
« Последнее редактирование: 05 Март 2014, 17:51:01 от hon »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5629
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #3 : 04 Март 2014, 22:51:09 »
Можно конечно искать что ещё надо отэкранировать (по одному добавлять/убирать экраинирование и смотреть), но я бы воспользовался группами [:alnum:], [:punct:], [:print:], [:space:], [:cntrl:] и т.д. (можно \w, \s и т.д.)
А если «кроме русских букв» то лучше воспользоваться отрицанием [^а-яА-ЯЁё]
« Последнее редактирование: 04 Март 2014, 22:53:51 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #4 : 04 Март 2014, 23:18:49 »
Цитировать
А если «кроме русских букв» то лучше воспользоваться отрицанием [^а-яА-ЯЁё]
Не получится. Там есть строки не только на русском и английском, а еще и на других языках.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7080
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #5 : 04 Март 2014, 23:21:36 »
hon, именно bash+grep нужен? Кодировка у файла какая? Все спецсимволы Вам надо экранировать.

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #6 : 04 Март 2014, 23:32:19 »
Кодировку не знаю. file выдает "Non-ISO extended-ASCII C program text". Почему он решил, что это программа на C -- не знаю. Наверное из-за спецсимволов в начале файла.

bash+grep не принципиален.

Вопрос как раз и состоит в том, как правильно заэкранировать имволы.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7080
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #7 : 04 Март 2014, 23:33:30 »
hon, кодировку определяют тем, при какой файл читается нормально...

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5629
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #8 : 05 Март 2014, 00:43:23 »
cat file.txt | grep -v '^[[:print:][:space:][:cntrl:]] *$'— не работает?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #9 : 05 Март 2014, 00:57:41 »
Выдает даже строки, состоящие только из цифр.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5629
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #10 : 05 Март 2014, 01:47:13 »
Так вроде и должен? [0-9… * Ты точнее сформулирой задание.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #11 : 05 Март 2014, 17:31:01 »
Нужно отобразить все строки, которые содержат символы, отличные от цифр, англ. букв, пробела, а также `~!@#$%^&*()_+=-[]\{}|\\;':"<>?,./

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5629
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #12 : 05 Март 2014, 17:57:57 »
Тогда не надо ставить *, которая обозначает и 0 таких символов, или не надо оборачивать поиск по -v… Тут есть тонкость, которую надо определить в условии, что именно нужно и какой формат входящей строки. Показывать ли если есть хотя-бы 1 символ из искомых или в строке вообще их не должно быть. И с пробелом вопрос — он то почти в каждой строке может быть?cat file.txt | grep '^[^0-9a-zA-Z[:punct:]]\+$'P.S. И пробел после ] (изначально его не было)
« Последнее редактирование: 05 Март 2014, 18:02:11 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #13 : 05 Март 2014, 20:00:02 »
Azure, спасибо. То, что нужно.

Оффлайн Back_man

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: bash и grep спецсимволы
« Ответ #14 : 21 Ноябрь 2014, 15:22:31 »
Всем привет.
Дабы не плодить новых тем задам свой вопрос в этой.

Стоит следующая задача: как с помощью grep вывести все строки, содержащие только печатные символы (то есть те, которые вводятся с клавиатуры), кроме букв русского алфавита? На выходе должны быть строки в которых не содержится ни одной русской буквы или непечатываемого символа. Надеюсь, что я понятно выразился.

Подскажите, пжлста, как это можно сделать?
« Последнее редактирование: 21 Ноябрь 2014, 15:39:04 от Back_man »

 

Страница сгенерирована за 0.074 секунд. Запросов: 24.