Мне нужен эквивалент команды Unix head
(отображать первые N строк вывода). Это то, что я использую в настоящее время:
tasklist | find /N " " | findstr /r \[[0-9]\]
Приведенный выше код отображает первые 10 строк tasklist
выходных данных. find /N " "
добавляет номер строки к началу каждой строки, а findstr /r \[[0-9]\]
первые 10 строк извлекает с помощью регулярных выражений.
Выше код работает, но мне нужно указать любой диапазон . Из-за того, что регулярные выражения не реализованы в соответствии со стандартами в Windows, я не могу заставить ничего работать.
Как извлечь произвольные строки из вывода cmd? Важно сделать это с помощью одной строки. Нет сценариев!
Ответы:
Powershell.
PS C:\> netstat | Select -First 20
Изменить: У меня есть ощущение, что вы будете настаивать на том, что вы можете использовать только cmd.exe около 1989 года, но это не так. Powershell встроен в каждую версию ОС Vista + и устанавливается на XP / 2003. Это является будущее Windows.
Редактировать: Хорошо, имей свой путь.
Будут отображаться первые 10 строк вывода netstat.
источник
Если вы человек типа Unix, возможно, установка CygWin даст вам более знакомую среду.
источник
Есть простое решение, которое намного проще, чем использование цикла "
for
".Давайте возьмем вывод из
dir/o-d
(вdir
обратном порядке по дате) в качестве примера.Например, если вы хотите вывести строки с 1 по 16, используйте:
Например, если вы хотите вывести строки с 16 по 45, используйте:
Образец вывода:
Сломать:
findstr
регулярное выражение на самом деле работает правильно. Ваша проблема с побегом . (См . Ссылку Роба для деталей.)Во- первых, сбросить весь вывод с помощью
dir/o-d
.Затем добавьте каждую строку с помощью "
$Num:
", используяfindstr/n ^^
^
означает соответствие начала строки, и^^
просто требуется экранированная версия, потому что мы находимся в cmd.Примечание: вам нужно использовать
findstr
это, потомуfind/n" "
что не будут совпадать строки без пробелов`.Наконец, обрезать вывод с помощью
findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"
.^1[6-9]:
это регулярное выражение для 16 до 19.^[2-3][0-9]:
является регулярным выражением для 20 - 39.^4[0-5]:
является регулярным выражением для 40 до 45.findstr "a b c"
средства поиска строк , которые соответствуют либо выраженияa
,b
илиc
.Также см. Https://stackoverflow.com/q/8844868/632951.
источник
findstr
не могу удалить вещи. Я думаю, что в таком случае вы можете быть вынуждены использовать цикл.Это однострочная команда, я надеюсь, что она работает и для вас.
источник