Попробуйте это (GNU awk):
awk -F"[; ]" '/12-11-18/ && $6=="word"' file
или sed
один:
sed -n '/12-11-18;\([^; ]*[; ]\)\{3\}word/p' file
Или grep с в основном тем же регулярным выражением (другой escape):
grep -E "12-11-18;([^; ]*[; ]){3}word" file
[^; ]
означает любой символ, который не ;
или
(пробел).
*
означает совпадение с любым повторением предыдущего персонажа / группы.
- [^; ]*
означает любую строку длины, которая не содержит ;
или пробела, ^
в [^; ]
- отрицание.
[; ]
означает ;
или пробел, либо один вхождение.
()
состоит в том, чтобы сгруппировать вышеперечисленные вместе.
{3}
соответствует трем повторениям прежнего персонажа / группы.
В целом ([^; ]*[; ]){3}
означает ;
/ разделенные пробелом три поля, включая разделители.
Как указывает @kvantour, если в одном месте может быть несколько пробелов, они могут быть неисправными.
Чтобы рассмотреть несколько пробелов как один разделитель, тогда:
awk -F"(;| +)" '/12-11-18/ && $6=="word"'
и
grep -E "12-11-18;([^; ]*(;| +)){3}word"
или GNU sed (posix / bsd / osx sed не поддерживает |
):
sed -rn '/12-11-18;([^; ]*(;| +)){3}word/p'