Командная строка Windows, я хочу найти в файле все строки, начинающиеся с:
# NNN "<file>.inc"
, где NNN
- это число, а <file>
- любая строка.
Я хочу использовать findstr, потому что не могу требовать, чтобы пользователи сценария установили ack.
Вот выражение, которое я придумал:
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*.inc" all_pre.txt
Файл для поиска all_pre.txt
.
Пока все хорошо. Теперь я хочу передать это другой команде, например, more
.
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9]*.inc" all_pre.txt | more
Результатом этого будет тот же вывод, что и в предыдущей команде, но с именем файла в качестве префикса для каждой строки (all_pre.txt).
Затем приходит:
FINDSTR: cannot open |
FINDSTR: cannot open more
Почему труба не работает?
фрагмент содержимого all_pre.txt
# 1 "main.ss"
# 7 "main.ss"
# 11 "main.ss"
# 52 "main.ss"
# 1 "Build_flags.inc"
# 7 "Build_flags.inc"
# 11 "Build_flags.inc"
# 20 "Build_flags.inc"
# 45 "Build_flags.inc(function a called from b)"
РЕДАКТИРОВАТЬ: Мне нужно также избежать точки в регулярном выражении. Не проблема, но стоит упомянуть.
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc" all_pre.txt
РЕДАКТИРОВАТЬ после Фрэнка Боллака:
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc.*" all_pre.txt | more
не работает, хотя (я думаю) он должен искать ту же строку, что и раньше, затем любой символ любое количество раз. Это должно включать "
, верно?