Bash 获取xargs到word拆分占位符{}
(虽然在Bash中有一个特定的定义,但在本文中它的意思是在空格或制表符上拆分。) 使用此输入向xargs演示问题Bash 获取xargs到word拆分占位符{},bash,xargs,Bash,Xargs,(虽然在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,arg
$ 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
word是如何将每一行分割成多个参数的
$ xargs <input.txt -L1 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
。(当然,除非命令
能够以不同的顺序接受参数,就像选项一样。)
在展开{}
占位符时,有没有办法让xargs-I{}
对每一行进行单词分割?排序
echo -e "1\n2 3" | xargs sh -c 'echo a "$@" b' "$0"
产出:
a 1 2 3 b
a 1 b
a 2 3 b
参考:
此外:
产出:
a 1 2 3 b
a 1 b
a 2 3 b
啊,有趣。。。这可以通过将要由
xargs
执行的所需命令包装到shell中来解决问题,以便xargs
to将参数传递给shell。然后,shell脚本通过$@
变量引用单词分割参数。聪明!谢谢但是等等,你不是想要两个结果吗a1b
和a23b
?这实际上是一个完美的解决方案,将shell包装器与$@
一起使用。你是说别的吗?我不确定你是想让我的例子的输出在一行上是a23b
,还是在两行上是a1b
和a23b
,所以我编辑了我的答案,把这两个选项都包括进去。啊,谢谢你的澄清。在我最初的示例中,我使用了-L1
或-I{}
,这两种方法在每次命令调用时都使用一行输入。当然,有其他选择也无妨。