Вы можете использовать grep -B2 -E '^ [0-9] {5} + [a-zA-Z] + $'
, чтобы попытаться найти только блоки адресов.
Некоторые примечания:
man grep
, чтобы получить представление о параметрах -B
- это «строки перед совпадением» и может быть лучше для вас, чем -C
-E
для расширенного синтаксиса регулярных выражений {5}
повторяет предыдущее пять раз), затем хотя бы один пробел ( +
принимает предыдущее одно или еще раз), а затем только буквы до конца строки. `
очень отличается от '
или "
. Вы можете попытаться найти строки, содержащие только два слова, если попытаетесь найти строки, содержащие только один пробел:
grep -E '^[^ ]+ [^ ]+'
Если вы хотите сопоставить что-то в нескольких строках, я не уверен, что grep
может это сделать. Вы можете попробовать сделать это с помощью sed
который может загружать следующие строки в пространство шаблонов с помощью N
, а затем сопоставлять их с этой конкатенацией (посмотрите man sed
, если это вам подходит). (Или perl
, я думаю, он может соответствовать многострочным шаблонам, но я не знаю как.)
В зависимости от того, что вы планируете делать, функция может соответствовать вашим требованиям:
cf () { cat /path/to/f1 /path/to/f2 /path/to/f3; }
Он не будет действовать как файл, но вы можете использовать подстановку процесса, чтобы подделать его:
wc -l < <(cf)
Или в примере wc -l
может быть проще просто:
cf | wc -l