首页 > 学技术 > 技术网文 > Linux Shell > 正文

[精华] xargs使用误区


来源 chinaunix.net 酷勤网整理

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




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=658764
转载请注明作者名及原文出处



收藏本页到: