Только шаблонная строка - PullRequest
       3

Только шаблонная строка

0 голосов
/ 12 февраля 2019

У меня есть файл, который содержит слова

abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf zasdg cbhjk asjk 

, включая другое содержимое.Слово начинается с abci, abdb, abcs, abai это мое требование.Поэтому я хочу только слово, печать которого начинается с abci, abdb, abcs, abai, как - abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf Azerbaijan

Я пробовал с помощью команды grep, но это мне не помогает

cat /etc/xyz.txt|egrep -o "abdb*|abci*|abcs*|abai*"
cat /etc/xyz.txt|egrep -Eow "abdb*|abci*|abcs*|abai*"

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

С GNU awk для мульти-символьных RS и RT:

$ awk -v RS='\\<(abdb|abci|abcs|abai)\\S*' 'RT{print RT}' file
abciuf.com
abdbhj.co.in
abcshjkl.org.in.2
abciuf
0 голосов
/ 12 февраля 2019

Вы также можете попробовать Perl

 perl -ne ' while(/(\b(abdb|abci|abcs|abai)\S+)/g) { print "$1 \n" } '

со своими входами

$ cat sin15.txt
abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf zasdg cbhjk asjk

$ perl -ne ' while(/(\b(abdb|abci|abcs|abai)\S+)/g) { print "$1 \n" } ' sin15.txt
abciuf.com
abdbhj.co.in
abcshjkl.org.in.2
abciuf

$
0 голосов
/ 12 февраля 2019
grep -Eo `\<(abdb|abci|abcs|abai)\S*' </etc/xyz.txt
  • \< (или \b) соответствует началу «слова» (или границы «слова»)
  • (A|B) соответствует A или B
  • \S* соответствует нулю или более непробельных символов (пока не непробельный символ)

  • было бы неплохо попробовать использовать опцию grep -w, но ее определение«слово» слишком строгое (сопоставление останавливается, если встречается .)

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