предоставление grep вывод к комнате

Канонический инструмент для этого был бы 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'
47
19.03.2011, 00:05
6 ответов

Необходимо использовать xargs превратить стандартный вход в аргументы в пользу rm.

$ ls | grep '^Dar' | xargs rm

(Остерегайтесь специальных символов в именах файлов; с GNU grep, Вы могли бы предпочесть

$ ls | grep -Z '^Dar' | xargs -0 rm

)

Кроме того, в то время как оболочка не использует regexps, это - простой шаблон:

$ rm Dar*

(между тем я думаю, что мне нужно больше сна.)

57
27.01.2020, 19:34
  • 1
    Принятие автора вопроса не сделало ошибку, когда он отправил вопрос, (s) он после rm Dar*, нет rm !(Dar*). –  Gilles 'SO- stop being evil' 18.03.2011, 23:55
  • 2
    ... право, да, я застрял в zsh ^ режим (подобный basg ! вещь). –  geekosaur 18.03.2011, 23:56
  • 3
    +1 Большой ответ, должен был добавить я | tr "\n" "\0" перед xargs бит. Замеченный в этом сообщении: stackoverflow.com/questions/20307299 / … –  Adam Plocher 29.01.2016, 02:32

Не анализируйте вывод ls.

Здесь, очень просто заставить оболочку фильтровать файлы, которые Вы хотите. Обратите внимание, что это - оболочка, это разворачивает шаблон Dar*, не rm команда. Расширение шаблона, выполненное оболочкой, называют globbing.

rm Dar*

В более сложных случаях ищите find команда.

5
27.01.2020, 19:34

Для передачи вывода в качестве аргумента я обычно использую цикл while, так как я не знаком с xargs.

ls | grep '^Dar' | while read line; do rm "$line";done;
2
27.01.2020, 19:34

Если вы хотите разграничить вывод grepсимволами новой строки, а не пробелами, вы можете указать это как xargsс помощью параметра -d.

$ ls | grep '^Dar' | xargs -d '\n' rm

(как описано в этот вопрос)

4
27.01.2020, 19:34

Лучшая команда для меня:

find./Daruchini* -exec rm {}\;
0
27.01.2020, 19:34

В 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 бесполезна.

2
04.04.2020, 08:14

Теги

Похожие вопросы