мой седь близко ... но не совсем там, не могли бы вы помочь, пожалуйста? - PullRequest
1 голос
/ 29 марта 2012

Я хочу напечатать только те строки, которые соответствуют критериям: "worde:" и "wordo;"Я получил это далеко:

sed -n '/\([a-z]*\)\1e:\1o;/p;'  

Но это не совсем работает.Может кто-нибудь, пожалуйста, усовершенствуйте это и скажите мне точно, как его исправленная версия / что не так с моей?(Обратите внимание, что никогда не было заглавных букв, поэтому я не стал включать их в свой начальный диапазон символов)

Спасибо,

Ответы [ 5 ]

3 голосов
/ 29 марта 2012

Это будет обрабатывать строки, где "worde: wordo;" (ничего между словами) не появляется:

sed -n '/\([a-z]*\)e:\1o;/p;'

Если вам нужно разрешить символы между словами, вам нужно что-то вроде этого:

sed -n '/\([a-z]*\)e:.*\1o;/p;'
0 голосов
/ 29 марта 2012

Это может работать для вас:

sed '/^\(.*\)[eE]:\s*\1[oO];/!d' file
0 голосов
/ 29 марта 2012

В одну сторону, используя чередование:

sed -n '/word\(e:\|o;\)/ p' infile
0 голосов
/ 29 марта 2012

Требуется ли использование групп захвата?Я пошел без них.

$ sed -n '/[\w]*[oe][:;]/p'

  • [\w]* - соответствует любому слову слова.(если вы действительно хотите только [a-z], поменяйте местами обратно)
  • [oe] - эти символы слова должны заканчиваться на e или o
  • [:;] -тогда есть : или ;
0 голосов
/ 29 марта 2012

Моя интерпретация вашего вопроса заключается в том, что вы хотите сопоставить строки, которые содержат worde: и wordo;

 sed -n '/worde:/{/wordo;/p}' infile

Параметр -n не позволяет sed печатать пространство шаблона (infile), первое регулярное выражение совпадает, затем управление перетекает в блок, если регулярное выражение не совпадает, то строка игнорируется. Внутри блока, если второе регулярное выражение сопоставлено, строка печатается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...