Получить xargs для разделителя слов {} - PullRequest
0 голосов
/ 17 ноября 2018

(хотя разбиение слов имеет определенное определение в Bash, в этом посте это означает для разделения на пробелы или табуляции .)

Демонстрация вопроса с использованием этого ввода для xargs,

$ cat input.txt
LineOneWithOneArg
LineTwo WithTwoArgs
LineThree WithThree Args
LineFour  With  Double  Spaces

и этой команды Bash для вывода переданных ему аргументов,

$ bash -c 'IFS=,; echo "$*"' arg0 arg1 arg2 arg3
arg1,arg2,arg3

обратите внимание, как xargs -L1 разбивает слова в каждой строкев несколько аргументов.

$ xargs <input.txt -L1 bash -c 'IFS=,; echo "$*"' arg0
LineOneWithOneArg
LineTwo,WithTwoArgs
LineThree,WithThree,Args
LineFour,With,Double,Spaces

Однако xargs -I{} расширяет всю строку до {} в качестве одного аргумента.

$ xargs <input.txt -I{} bash -c 'IFS=,; echo "$*"' arg0 {}
LineOneWithOneArg
LineTwo WithTwoArgs
LineThree WithThree Args
LineFour  With  Double  Spaces

Хотя это вполне разумное поведение для подавляющего большинстваВ некоторых случаях предпочтение отдается разделению слов (первый пример xargs).

И хотя xargs -L1 можно рассматривать как обходной путь, его можно использовать только для размещения аргументов в конец командной строки, что делает невозможным выражение

$ xargs -I{} command first-arg {} last-arg

с xargs -L1.(Это, конечно, если command не может принимать аргументы в другом порядке, как в случае с опциями.)

Есть ли способ получить xargs -I{} для разделения словкаждая строка при расширении {} заполнителя?

...