Home > other >  how to find a word that contain "a" and also end with "d"? (Bash Regex)
how to find a word that contain "a" and also end with "d"? (Bash Regex)

Time:12-08

  grep -E "a|d$$" filename

This is what I have but it does not works. Can I get some advice how I should approach it?

CodePudding user response:

| is OR, not AND. So your command returns lines that either contain a or end with d (I assume $$ was a typo for $). To match both conditions sequentially, just put one pattern after the other, don't use |.

If the file is one word per line, use:

grep 'a.*d$' filename

If there are multiple words per line, and you're using GNU grep, you can use:

grep -P 'a\w*d\b' filename

\w matches word characters, and \b matches a word boundary after the d.

This will match the whole line containing the word. If you only want to return the word itself, use

grep -P -o '\b\w*a\w*d\b' filename

The -o option means to only show the part of the line that matches the regexp

CodePudding user response:

Using awk:

awk '{for (i=0; i<=NF; i  ) {if ($i~/a.*d$/) {print $i}}}'

Using GNU awk, or any awk that implements regex for the record separator (RS):

awk -v RS='[[:space:]] ' '/a.*d$/'

Using GNU grep:

grep -Po '[^[:space:]]*a[^[:space:]]*d(?=[[:space:]]|$)'
  • Related