2013-09-04 2 views
0

мне нужно использовать СЭД, чтобы искать все строки в файле с шаблоном «[любой] | [независимо]», поэтому я использую следующее регулярное выражение:Как использовать sed и regex?

sed '/\"[a-zA-Z0-9]+\|[a-zA-Z0-9]+\"/p' test2.txt 

Но это не работает, потому что в этом файле возвращается что-то, когда он не должен

RTV0031605951US|3160595|20/03/2013|0|"Laurie Graham"|"401" 

Знает ли кто-нибудь с регулярным выражением, следует ли использовать? Заранее спасибо

+1

Так в чем проблема? Строка должна соответствовать вашему описанию желаемого шаблона. – devnull

ответ

0

Я вижу три проблемы с регулярным выражением:

  1. + не метасимволом, так что вам нужно, чтобы избежать его, чтобы получить его особое значение.
  2. Аналогичная проблема возникает с трубой. И это не метасимвол, поэтому не избегайте его, чтобы соответствовать ему буквально.
  3. Sed по умолчанию печатает каждую строку, которая соответствует, поэтому добавьте -n, чтобы избежать этого, если вы уже используете /p, который печатает его. В противном случае вы будете иметь эти строки дважды на выходе.
0

sed выход ничего будет, что это частичный матч.

Чтобы соответствовать только целым строкам, которые соответствуют вашему регулярному выражению, добавьте ^ и $ к началу/концу:

sed '/^\"[a-zA-Z0-9]+\|[a-zA-Z0-9]+\"$/p' test2.txt 
0
sed '/\B\"[ [:alnum:]]\+\"|\"[ [:alnum:]]\+\"\B/!d' file 

Если вы используете это в sed сценарии, не избежать двойных кавычек.