如何在包含空格的输入中使用xargs?

时间:2016-08-05 23:10:06

标签: bash xargs

我有一个文件,其中包含换行符分隔的redis键列表(包含空格)。例如:

select ...
       , case hh.time  when '00:00' then VAL_0000
                       when '00:30' then Val_0030
                       when '01:00' then Val_0100
                       when '01:30' then Val_0130
         ...
         end as Value
from data cross join "half-hours" as hh

如何使用xargs从redis中删除它们。

我想做类似的事情:

My key 1 My key 2 some other key

但由于空格,它不起作用。

1 个答案:

答案 0 :(得分:3)

如果输入是换行符分隔的,请使用:

$ cat file_with_keys | xargs -d'\n' printf "<%s>\n"
<My key 1>
<My key 2>
<some other key>

以上说明了xargs在管道中的使用。如果源是真正的文件,则不需要cat

xargs -d'\n' printf "<%s>\n" <file_with_keys

顺便说一句,人们经常希望xargs提供-r--no-run-if-empty选项,以防止在没有提供参数的情况下运行程序:

xargs -rd'\n' printf "<%s>\n" <file_with_keys

以上假定GNU xargs。正如Jonathan Leffler在评论中指出的那样,其他xargs可能不支持这些选项。特别是,xargs on Mac OSX既不支持-d也不支持-r