2015-07-06 2 views
1

Я хочу извлечь все строки, начинающиеся с «B» и заканчивающиеся на «3». Все строки доступны в файле «input.txt».Соответствие шаблону строки

Я использовал эту команду sed, но она искала неправильные результаты. Может ли кто-нибудь помочь мне в этом?

sed -n '/^B*3$/p' input.txt 

Sample_input:

Boby3 
apple2 
BUbbly3 
Banana3 
youas5 
BUBLY3 
BUb2 

Sample_output:

Boby3 
BUbbly3 
Banana3 
BUBLY3 
+0

Вы имели в виду линию? Быть будет лучше. –

+0

не соответствует линия. только слова. Пример Bubbles3, Bob3, – Bubbles

+0

Измените свой вопрос, чтобы показать несколько строк ввода образца и ожидаемого вывода. –

ответ

2

Это должно работать:

grep -oE "\bB[^[:space:]]+3\b" file 

Он будет соответствовать всем символам (включая специальные символы и исключая пробелы) между В и 3.

Если у вас хотите только совместить символы слова:

grep -oE "\bB\w+3\b" file 

-o опция для только соответствует (возвращает только согласованную строку).

-E предназначен для расширенного регулярного выражения.

Примечание: Предполагается, что хотя бы один символ должен находиться между B и 3. Если нет (т. Е. Если B3 должно быть сопоставлено), измените + в регулярном выражении на *.

+0

что такое \ b используется? – Bubbles

+0

@Bubbles Граница Word – Jahid

+0

Вышеупомянутое не будет соответствовать строке 'B3' - это то, что нужно? –

1

Grep в одиночку быть sufficien для извлечения слов.

grep -oP '\bB\w*3\b' file 

или

grep -oP '(?<!\S)B\S*3(?!\S)' file 
+0

извините, даже если это не получается. я получаю NULL set – Bubbles

+0

grep будет хорошо. –

+5

Здесь мы снова и снова: '\ b' и' \ w' являются синтаксисом PCRE, 'grep' принимает только BRE. – lcd047

Смежные вопросы