Я хочу найти команду bash, которая позволит мне grep каждый файл в каталоге и записать вывод этого grep в отдельный файл. Мое предположение было бы сделать что-то вроде этогоКак использовать> в команде xargs?
ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out"
, но, насколько я знаю, xargs не любит двойные кавычки. Однако, если я удаляю двойные кавычки, команда перенаправляет вывод всей команды в один файл с именем «{}». Out вместо нескольких отдельных файлов.
Кто-нибудь знает, как это сделать, используя xargs? Я просто использовал этот сценарий grep в качестве примера, чтобы проиллюстрировать мою проблему с xargs, поэтому любые решения, которые не используют xargs, не применимы для меня.
+1. В самом деле, я не должен был забывать о котировках. – Stephan202
Приобретено, но сомнение. не используя 'xargs' без' -0': это применимо только при выводе 'find' с помощью' xargs', правильно? когда я делаю 'xargs -a' как я буду использовать это? Большинство команд, таких как 'grep' выходы с' \ n', а не '\ 0.' Единственный способ, с которым я могу работать, это снова использовать' tr', чтобы исправить это. Но почему это важно использовать только с '-0'? –
legends2k
@ legends2k, потому что, когда вы не используете '-0',' xargs' возьмет ваши имена файлов и сломает все пробелы, кавычки и обратные слэши в них. Вы должны просто забыть о 'xargs' как инструменте. Если у вас есть строки, используйте цикл bash для итерации строк: 'while read line; do "$ REPLY"; done
lhunath