Two arguments in a command with xargs and bash -c
You can use substitution -I{} to put the argument into the middle of the command.
> echo "a\nb\nc\nd" | xargs -I{} echo {}!
a!
b!
c!
d!
I can use -L2 to provide exactly 2 arguments to the command:
> echo "a\nb\nc\nd" | xargs -I{} -L2 echo {}!
a b!
c d!
But I want to use two arguments, the first in one place, the next in another place:
> echo "a\nb\nc\nd" | xargs -I{} -L2 echo {}x{}!
a bxa b!
c dxa b!
I wanted axb! but got a bxa b!. In order to achieve this you have to pass arguments to a bash command.
> echo "a\nb\nc\nd" | xargs -L2 bash -c 'echo $0x$1!'
axb!
cxd!
Just like calling
bash -c 'echo $0x$1!' a b
Where $0 represents the first argument and $1 represents the second argument.