man xargs可以看出:
xargs从标准输入中读取数据,并以空白和换行符分割每个参数(引号中的空白不作为分割符)。然后执行指定的命令(并把分解后的参数附加到命令后面)。如果没有指定具体的命令,默认使用/bin/echo命令。
如果没有特别指定,xargs会把`_'当作结束标志。
综上所述,xargs不适合用作文本处理,特别是重要的数据处理。
举例说明(供参考):
r2007@www r2007 $ cat a
it's me!
over
r2007@www r2007 $ xargs <a
xargs: unmatched single quote
r2007@www r2007 $ cat a
arg1 arg2 _ arg3
foo bar
r2007@www r2007 $ xargs <a
arg1 arg2
r2007@www r2007 $ cat a
\n: new line
\t: tab
r2007@www r2007 $ xargs <a
n: new line t: tab
waker 回复于:2005-11-29 17:36:18
收下了
flw 回复于:2005-11-29 17:43:35
幸好我还没学会,要不就犯错了。
记住了记住了。
建议加精华。太危险了哦~
寂寞烈火 回复于:2005-11-29 17:46:52
哦,原来如此 :mrgreen:
小渔儿 回复于:2005-11-29 17:50:01
可以设置结束标志吗
dingyi129 回复于:2005-12-04 18:41:22
收到
dove-young 回复于:2005-12-08 13:04:28
引用:综上所述,xargs不适合用作文本处理,特别是重要的数据处理。
谁告诉你这个东西拿来作文本处理的?
r2007 回复于:2005-12-08 13:29:14
引用:原帖由 dove-young 于 2005-12-8 13:04 发表
谁告诉你这个东西拿来作文本处理的?
有则改之,无则加勉。
qbqqq 回复于:2006-03-15 10:13:03
学习中哦!
banhao 回复于:2006-03-15 11:02:11
没完全看懂,学习中
banhao 回复于:2006-03-15 11:04:35
是不是说xargs这个命令会根据不同的输入文本产生不同的结果啊?因此对于变化的文本是不适合的啊?有可能导致意想不到的结果产生。
wantfly 回复于:2006-05-30 09:58:08
[root@netflow ~]# xargs <a
xargs: unmatched single quote
[root@netflow ~]# cat a
it's me!
over
[root@netflow ~]# xargs <a
xargs: unmatched single quote
[root@netflow ~]# xargs < a
xargs: unmatched single quote
[root@netflow ~]# cat a
it's me!
over
[root@netflow ~]#
為什麼我執行的結果是這樣呢??
環境是RHEL AS4
waker 回复于:2006-05-30 10:15:46
to wantfly
请细读楼主的发帖
yjh777 回复于:2006-05-30 17:25:43
记住这句话就行了:
The default command for xargs is echoechoecho. This means that input piped to xargs may have linefeeds and other whitespace characters stripped out.
$ xargs --verbose <file 看看
Example 12-5. Logfile: Using xargs to monitor system log
引用:
1 #!/bin/bash
2
3 # Generates a log file in current directory
4 # from the tail end of /var/log/messages.
5
6 # Note: /var/log/messages must be world readable
7 # if this script invoked by an ordinary user.
8 # #root chmod 644 /var/log/messages
9
10 LINES=5
11
12 ( date; uname -a ) >>logfile
13 # Time and machine name
14 echo --------------------------------------------------------------------- >>logfile
15 tail -$LINES /var/log/messages | xargs | fmt -s >>logfile
16 echo >>logfile
17 echo >>logfile
18
19 exit 0
20
[color=Red]
21 # Note:
22 # ----
23 # As Frank Wang points out,
24 #+ unmatched quotes (either single or double quotes) in the source file
25 #+ may give xargs indigestion.
26 #
27 # He suggests the following substitution for line 15:
28 # tail -$LINES /var/log/messages | tr -d "\"'" | xargs | fmt -s >>logfile
[/color]
29
30
31
32 # Exercise:
33 # --------
34 # Modify this script to track changes in /var/log/messages at intervals
35 #+ of 20 minutes.
36 # Hint: Use the "watch" command.
[ 本帖最后由 yjh777 于 2006-6-5 17:03 编辑 ]
aix8179 回复于:2006-05-30 17:37:37
up
Cygnus 回复于:2006-05-31 02:52:58
Try GNU xargs:
xargs -0 < a
fjfd 回复于:2006-05-31 10:07:44
up
|