Я хочу оставить только те строки, которые содержат слово example
и удалите все остальные строки.
Я думал, что это сработает, но это противоположно тому, что я пытаюсь сделать:
PowerShell -Command "gci *.txt | foreach { (cat $_.FullName | ? { $_ -notlike '*example*' }) | set-content $_.FullName}"
Я хочу получить команду, которая поворачивает это:
This line contains example.
This line does not.
В это:
This line contains example.
Кажется, это должно быть просто, но я не могу найти на него ответа. Найденные мной решения либо не сработали, либо работают наоборот, либо включают в себя множество других вещей, которые мне не нужны.
Ваше здоровье.
1 ответ
Текущая команда использует -notlike
; это означает, что вам не нужны строки, в которых есть слово example
что прямо противоположно тому, чего вы действительно хотите. Используйте вместо -like
. Ваша команда будет:
PowerShell -Command "gci *.txt | foreach { (cat $_.FullName | ? { $_ -like '*example*' }) | set-content $_.FullName}"
Ваше здоровье. Я запустил его примерно на 2000 текстовых файлах. Если в txt-файле не было строки со строкой, он оставляет все строки в покое — когда он должен оставлять файл размером 0 КБ? Я тестировал это, намеренно добавляя строку в первую строку в таких файлах, а затем удаляя все остальные строки, оставляя только первую. Это немного странно, но я все еще могу обойти это и отсеять файлы со строкой в любой строке (используя Agent Ransack для поиска) и получить только строки, содержащие строку.
— bat_cmd
15 часов назад