Что вы пытаетесь достичь? Там может быть другой способ сделать это.
Приостановлено до дальнейшего уведомления.
@Dennis Я использую его для разных вещей, часто в конвейере с grep, sed, очень простым awk и т. Д., Главным образом для параллелизации исполнения. find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4слишком много, чтобы напечатать по сравнению с ls *.foo | xargs -P4.
Корнель
Сценарии и функции - это два отличных способа сократить объем печати.
Perl является излишним для одного персонажа. trбыстрее как для процессора, так и для ваших пальцев.
Привет, мир,
54
Поддержка GNU xargs (по умолчанию в Linux; установка findutilsиз MacPorts в OS X для его получения) поддерживает возможность -dуказания пользовательского разделителя для ввода, что позволяет
Я имею alias xxargs="xargs -d '\n'"в моем bashrc. Так что я могу просто делать такие вещи:grep -IRl foo | xxargs sed -i s/foo/bar/g
Тайлер
4
Это действительно должен быть принятый ответ. Не нужно вырывать Perl. Хотя trэто тоже хорошая идея.
Этеш Чоудхури
3
brew install findutilsи gxargsбыло именно то, что мне нужно на OS X, спасибо.
Брэд Кох
5
С Bash я обычно предпочитаю избегать xargs для чего-либо менее хитрого, в пользу циклов while-read. По вашему вопросу, while read -ar LINE; do ...; doneделает ли работа (не забудьте использовать синтаксис массива с LINE, например, ${LINE[@]}для всей строки). Это не требует какой-либо хитрости: по умолчанию для чтения используется только \nсимвол конца строки.
Я должен опубликовать вопрос на SO о плюсах и минусах циклов xargs и while-read ... готово!
Это может только подражать xargs -n1 -d'\n', а не весь xargs.
Привет, мир,
@HelloWorld - Вы можете достаточно легко объединить аргументы, чтобы вы могли имитировать, используя xargs -n$Nлишь немного дополнительных сценариев.
Чарльз Стюарт
Да, я из первых рук, это просто замечание, которое стоит упомянуть.
Привет, мир,
Это именно то, что я делаю! Кроме того, вы можете использовать readопции, такие как чтение большего количества слов в отдельных переменных или изменить разделитель с помощью IFS=' '.
Цезарсоль
0
Не со стандартной версией. У меня есть взломанная версия, которая делает это - я использовал ее до того, как узнал о ' find ... -print0 | xargs -0 ...'. Свяжитесь со мной, если хотите получить копию - смотрите мой профиль. (Никакой ракетостроения - это только делает работу. Это не полная копия xargs.)
Если fileсодержит пробелы и символы новой строки, то результат этой команды сделает невозможным различие между ними, которое, кажется, идет в направлении, противоположном тому, о котором спрашивает этот вопрос
find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4
слишком много, чтобы напечатать по сравнению сls *.foo | xargs -P4
.Ответы:
Нечто подобное
должно сработать.
источник
tr '\n' '\0'
тоже работаетtr
быстрее как для процессора, так и для ваших пальцев.Поддержка GNU xargs (по умолчанию в Linux; установка
findutils
из MacPorts в OS X для его получения) поддерживает возможность-d
указания пользовательского разделителя для ввода, что позволяетисточник
alias xxargs="xargs -d '\n'"
в моем bashrc. Так что я могу просто делать такие вещи:grep -IRl foo | xxargs sed -i s/foo/bar/g
tr
это тоже хорошая идея.brew install findutils
иgxargs
было именно то, что мне нужно на OS X, спасибо.С Bash я обычно предпочитаю избегать xargs для чего-либо менее хитрого, в пользу циклов while-read. По вашему вопросу,
while read -ar LINE; do ...; done
делает ли работа (не забудьте использовать синтаксис массива с LINE, например,${LINE[@]}
для всей строки). Это не требует какой-либо хитрости: по умолчанию для чтения используется только\n
символ конца строки.Я должен опубликовать вопрос на SO о плюсах и минусах циклов xargs и while-read ... готово!
источник
xargs -n1 -d'\n'
, а не весьxargs
.xargs -n$N
лишь немного дополнительных сценариев.read
опции, такие как чтение большего количества слов в отдельных переменных или изменить разделитель с помощьюIFS=' '
.Не со стандартной версией. У меня есть взломанная версия, которая делает это - я использовал ее до того, как узнал о '
find ... -print0 | xargs -0 ...
'. Свяжитесь со мной, если хотите получить копию - смотрите мой профиль. (Никакой ракетостроения - это только делает работу. Это не полная копия xargs.)источник
Что насчет
cat file | xargs | sed 's/ /\n/ig'
этого, будет конвертировать пробелы в новые строки, используя стандартные инструменты Linux bash.источник
file
содержит пробелы и символы новой строки, то результат этой команды сделает невозможным различие между ними, которое, кажется, идет в направлении, противоположном тому, о котором спрашивает этот вопрос