了解空格和 xargs
我了解到,当将 find
与 xargs
一起使用时,建议使用 -print0
和 -0
参数使带有空格的文件名能够正常工作。
现在我有一个名为 patterns
的文件,其中包含以下内容
a a a
b b b
,并且我有一个名为 text
的文件,其中包含以下内容
a
b b b
当我运行以下命令时,
cat patterns| xargs -ipattern grep pattern text
我得到
b b b
的结果是 xargs知道寻找 aa a
和 bb b
而不是 a
、a
、a
>、b
、b
、b
。
我的问题是为什么上面的例子没有任何问题?我认为它会寻找 a
、a
、a
、b
、b
, b
并返回 text
中的两行。
我缺少什么?
I've learned that when using find
with xargs
, it's advisable to use the -print0
and -0
arguments for file names with spaces to work correctly.
Now I have the following file named patterns
with the following content
a a a
b b b
and I have the file named text
with the following content
a
b b b
When I run the following command,
cat patterns| xargs -ipattern grep pattern text
I get
b b b
which means that xargs knew to look for a a a
and b b b
instead of a
, a
, a
, b
, b
, b
.
My question is why isn't there any problems in the example above? I thought it would look for a
, a
, a
, b
, b
, b
and return both lines in text
.
What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
-i
和-I
将其从使用(可能带引号的)空格分隔的字符串更改为行。引用man xargs
:当您在默认(即不是
-I
)模式下使用文件名时,您需要保护空格、制表符和(而不是像这样的文件名)都是个好主意)换行符;因此-0
。-i
and-I
change it from using (possibly quoted) whitespace-separated strings to lines. Quotingman xargs
:When you're working with filenames in default (i.e. not
-I
) mode, you need to protect spaces, tabs, and (not that filenames like this are ever a good idea) newlines; hence-0
.