在标准输出上输出版本信息并退出。
xargs
这是给命令传递参数的一个过滤器, 也是组合多个命令的一个工具.它把一个数据流分割为
一些足够小的块, 以方便过滤器和命令进行处理. 由此这个命令也是后置引用的一个强有
力的替换. 在一般使用过多参数的命令替换失败的时候,用xargs 来替换它一般都能成功.
[1] 通常情况下, xargs 从管道或者stdin 中读取数据, 但是它也能够从文件的输出中读取
数据.
xargs 的默认命令是 echo. 这意味着通过管道传递给xargs 的输入将会包含换行和空白, 不
过通过 xargs 的处理, 换行和空白将被空格取代.
-0 :如果输入的 stdin 含有特殊字符,例如 `,
\, 空格键等等字符时,这个 -0 参数
可以将他还原成一般字符。这个参数可以用于特殊状态喔!
反转义
-e :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs分析到
这个字符串时,就会停止继续工作!-p :在运行每个命令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 命令运行时,要使用几个参数的意思。看范例三。
-i 表示 find 传递给xargs的结果 由{}来代替
-I 我认为是和i差不多,可以这么认为 -i可以用-I {} 来代替
-p 交互式提问y来确认命令的每次执行。
-t 在执行前回显各个command
注意: 一个有趣的 xargs 选项是 -n NN, NN 是限制每次传递进来参数的个数.
ls | xargs -n 8 echo 以每行8 列的形式列出当前目录下的所有文件.
[root@localhost dir]# ls . | grep ".*.txt" |xargs -i -t cp ./{} dir
1.grep -c option file:显示文件中包含搜索内容行数,比如前面的命令表示显示
file中包含option内容的行数是几
2. grep -n option flie:列出所有的匹配行,并在最前面添加行的序列数
3. grep -v option file:显示文件中不包含所搜索内容的行数,这个和-c的参数正好相反
4. gep -i option file:列出所搜索内容的匹配行,搜索过程中不区分大小写
5. grep -l option *:列出所有包含option内容的文件的名
6. grep -r option :对当前目录和所有的子目录进行搜索
7. grep -w option file:精确搜索,可以说准确性搜索,比如:grep -w b*
a.txt:此命令执行时,*不会默认为任何字符,只表示字面意思,就是一个*字符.
8. grep -x option file:完全匹配输出,比如:grep -x hello
a.txt,只会输出某一行存在hello字符串,并且此行仅包含hello的内容。假设a.txt中有一行“hello
all”,执行上述命令,此行不会被搜索到。
find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f grep -rliwZ GUI / | xargs -0 rm -f
简单的格式化文本
fmt [option]
[file-list]
fmt通过将所有非空白行的长度设置为几乎相同,来进行简单的文本格式化
参数
fmt从file-list中读取文件,并将其内容的格式化版本发送到标准输出。如果不制定文件名或者用连字符(-)来替代文件名,则fmt将从标准输入读取文本信息
选项
-s 截断长行,但不合并
-t 除每个段落的第1行外都缩进
-u 改变格式化,使字之间出现一个空格,句子之间出现两个空格
-w
n 将输出的行宽改为n个字符。不带该选项时,fmt输出的行宽度为75个字符
linux
tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容。
一、tail命令语法
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k
Number ] [ File ]
参数解释:
-f 该参数用于监视File文件增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number
多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。
File 指定操作的目标文件名称
上述命令中,都涉及到number,假设不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾部開始计算。
tail可运行文件一般在/usr/bin/以下。
tail -$LINES /var/log/messages | tr -d "\"'" | xargs | fmt -s
>>logfile
15 ls . | xargs
-i -t cp ./{} $1
16 # ^^ ^^ ^^
17 # -t 是 "verbose" (输出命令行到stderr) 选项.
18 # -i 是"替换字符串"选项.
19 # {} 是输出文本的替换点.
20 # 这与在"find"命令中使用{}的情况很相像
ps ax | grep "$PROCESS_NAME" | awk '{print $1}' | xargs -i kill {} 2&>/dev/null
---------------------------------------------------------
29 # 注意:
30 # -i 参数是xargs 命令的"替换字符串"选项.
31 # 大括号对的地方就是替换点.
32 # 2&>/dev/null 将会丢弃不需要的错误消息.
一行一行列出来 然后 wc.. 判断多少个 单词 然后
uniq -c算出不一样的 个数
29 cat "$1" | xargs -n1 | \
30 # 列出文件, 每行一个单词.
31 tr A-Z a-z | \
32 # 将字符转换为小写.
33 sed -e 's/\.//g' -e 's/\,//g' -e 's/ /\
34 /g' | \
35 # 过滤掉句号和逗号,
36 #+ 并且将单词间的空格修改为换行,
37 sort | uniq -c | sort -nr
38 # 最后统计出现次数,把数字显示在第一列,然后显示单词,并按数字排序.
39
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
语法:uniq [-cdu][-f][-s][-w][--help][--version][输入文件][输出文件]
补充说明:uniq可检查文本文件中重复出现的行列。
参数:
-c或--count 在每列旁边显示该行重复出现的次数。
-d或--repeated 仅显示重复出现的行列。
-f或--skip-fields= 忽略比较指定的栏位。
-s或--skip-chars= 忽略比较指定的字符。
-u或--unique 仅显示出一次的行列。
-w或--check-chars= 指定要比较的字符。
--help 显示帮助。
--version 显示版本信息。
[输入文件] 指定已排序好的文本文件。
[输出文件] 指定输出的文件。
uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次!
以下是一些常见的例子。
当你有一个包含相同条目的雇员(employee)的文件,你可以以如下方式来删除相同的条目
$ sort namesd.txt |
uniq
[root@localhost sh]# cat a2.txt | xargs -n1|sed -e 's/\.//g' -e
's/\,//g' -e 's/ ^\///g' | tr a-z A-Z |sort|uniq -c |sort
-nr
#!/bin/bash
name=(`grep 'failed' /var/log/secure | sed 's/.*from \(.*\)
port.*/\1/g'|sort|uniq -c |tr -s ' ' ':'`)
echo $name
for i in ${name[*]}
do
count=`echo $i |awk -F':' '{print $2}'`
echo $count
if [ "$count" -gt 3 ]
then
echo "sshd:$ip" >> aa.xx
fi
done
expr还有截取的功能
z=`expr substr $string $position $length`
在位置$position 上提取$length 长度的子串.
注意: ":" 操作可以替换 match. 比如, b=`expr $a : [0-9]*`与上边所使用的 b=`expr
match $a [0-9]*` 完全等价.
LRFDATE=`expr "$LRFDATE" : '[[:space:]]*\(.*\)[[:space:]]*$'`
cut
一个从文件中提取特定域的工具. 这个命令与 awk 中使用的 print $N 命令很相似, 但是
更受限. 在脚本中使用cut 命令会比使用 awk 命令来得容易一些. 最重要的选项就是 -d
(字段定界符) 和 -f (域分隔符) 选项.
使用 cut 来获得所有mount 上的文件系统的列表:
1 cut -d ' ' -f1,2 /etc/mtab
使用 cut 命令列出 OS 和 kernel 的版本:
1 uname -a | cut -d" " -f1,3,11,12
使用 cut 命令从 e-mail 中提取消息头:
bash$ grep '^Subject:' read-messages | cut -c10-80
Re: Linux suitable for mission-critical apps?
MAKE MILLIONS WORKING AT HOME!!!
Spam complaint
Re: Spam complaint
使用 cut 命令来分析一个文件:
1 # 列出所有在/etc/passwd 中的用户.
2
3 FILENAME=/etc/passwd
4
5 for user in $(cut -d: -f1 $FILENAME)
6 do
7 echo $user
8 done
9
10 # Thanks, Oleg Philon for suggesting this.
cut -d ' ' -f2,3 filename 等价于 awk -F'[ ]' '{ print $2, $3 }'
filename