Канонический инструмент для этого был бы sed
.
sed -n -e 's/^.*stalled: //p'
Подробное объяснение:
-n
средства не распечатать что-либо по умолчанию.-e
сопровождается командой sed.s
заменяющая команда шаблона.^.*stalled:
соответствует шаблону, который Вы ищете плюс любой предыдущий текст (.*
значение любого текста, с начальной буквой ^
сказать, что матч начинается в начале строки). Отметьте это если stalled:
несколько раз происходит на строке, это будет соответствовать последнему вхождению.stalled:
, заменен пустой строкой (т.е. удален).p
средства распечатать преобразованную строку.Если Вы хотите сохранить часть соответствия, используйте обратную ссылку: \1
в сменной детали определяет то, что в группе \(…\)
в шаблоне. Здесь, Вы могли записать stalled:
снова в сменной детали; эта функция полезна, когда шаблон, который Вы ищете, является более общим, чем простая строка.
sed -n -e 's/^.*\(stalled: \)/\1/p'
Иногда Вы будете хотеть удалить часть строки после соответствия. Можно включать его в соответствие включением .*$
в конце шаблона (любой текст .*
сопровождаемый к концу строки $
). Если Вы не помещаете ту часть в группу, на которую Вы ссылаетесь в тексте замены, конец строки не будет в выводе.
Как дальнейшая иллюстрация групп и обратных ссылок, эта команда подкачивает часть перед соответствием и частью после соответствия.
sed -n -e 's/^\(.*\)\(stalled: \)\(.*\)$/\3\2\1/p'
Необходимо использовать xargs
превратить стандартный вход в аргументы в пользу rm
.
$ ls | grep '^Dar' | xargs rm
(Остерегайтесь специальных символов в именах файлов; с GNU grep, Вы могли бы предпочесть
$ ls | grep -Z '^Dar' | xargs -0 rm
)
Кроме того, в то время как оболочка не использует regexps, это - простой шаблон:
$ rm Dar*
(между тем я думаю, что мне нужно больше сна.)
Здесь, очень просто заставить оболочку фильтровать файлы, которые Вы хотите. Обратите внимание, что это - оболочка, это разворачивает шаблон Dar*
, не rm
команда. Расширение шаблона, выполненное оболочкой, называют globbing.
rm Dar*
В более сложных случаях ищите find
команда.
Для передачи вывода в качестве аргумента я обычно использую цикл while, так как я не знаком с xargs.
ls | grep '^Dar' | while read line; do rm "$line";done;
В Catalina 10.15.3 с zsh я обнаружил, что для работы с новыми строками и пробелами был:
sudo find / | grep -i 'yourString' | tr '\n' '\0' | xargs -0 -n1 rm -r
Другими словами, путем перевода новых строк без пробела (tr \n в \0 )перед удалением с помощью «rm -0».
Кроме того, я всегда использую 'find'+'grep -i', потому что 'find -inname' иногда ничего не выводит.
Последнее замечание :Находит и удаляет файлы и папки, соответствующие 'yourString'. Только для файлов укажите "найти -тип f",и тогда опция "-r" для rm бесполезна.
rm Dar*
, нетrm !(Dar*)
. – Gilles 'SO- stop being evil' 18.03.2011, 23:55zsh
^
режим (подобныйbasg
!
вещь). – geekosaur 18.03.2011, 23:56| tr "\n" "\0"
передxargs
бит. Замеченный в этом сообщении: stackoverflow.com/questions/20307299 / … – Adam Plocher 29.01.2016, 02:32