Linux 命令find,tar,ps,grep,sed,awk

.Z:compress程序压缩文件
.bz2:bzip2程序压缩
.gz:gzip程序压缩
.tar:tar打包,未压缩
.tar.gz:tar打包,经gzip压缩 
tar命令:
命令格式:tar [options] tarfile filepath
-c 建立压缩文件;-z gzip压缩;-j bzip2压缩;-v 压缩过程显示文件;-f 后面跟文件
-x 解压缩;-t 看压缩文件中的文件 (-c -x -t)选项只能有一个存在
命令示例:
tar cvf /tmp/etc.tar /etc;仅打包,不压缩
tar czvf /tmp/etc.tar.gz /etc;打包,gzip压缩
tar cjvf /tmp/etc.tar.bz2 /etc;打包,bzip2压缩
tar xzvf /tmp/etc.tar.gz;解压到本地目录
tar xzvf /tmp/etc.tar.gz /etc;把etc.tar.gz解压到/etc下
tar czvf this.tar.gz ./*:将当前目录下的所有文件压缩为this.tar.gz
tar xzvf this.tar.gz ./:将this.tar.gz解压到当前目录下

ls命令
命令格式:ls [options] filepath
-a列出所有文件名,含隐藏文件
-d列出所有目录,不含符号链接(..也不包含)
-s文件大小
-l长列表格式输出

tee命令
  功能说明:读取标准输入的数据,并将其内容输出成文件。
  语   法:tee [-ai][--help][--version][文件…]
  补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。我们可利用tee把管道导入的数据存成文件,甚至一次保存数份文件。
  参   数:-a 附加到既有文件的后面,而非覆盖它。如果给予tee指令的文件名称已经存在,预设会覆盖该文件的内容。加上此参数后,数据会新增在该文件内容的最
后面,而不会删除原先之内容。

  -i 忽略中断信号
  --help 在线帮助
  --version 显示版本信息

rm命令:
rm -f file:强制删除,不论file是否存在
rm -i file:删除file前,提示
rm -I file*:删除三个以上文件,提示。三个及其以下不提示
rm -r directory:递归删除,删除目录及目录下的所有内容

find命令
命令格式:find [path] [options] [tests] [actions]
[path],绝对路径或者相对路径,可以指定多个路径
[options],-mount(或者-xdev)不搜索其他文件系统下的目录
[tests] -type c 文件的类型c;-user username 文件的拥有这是指定的用户username;-name pattern 文件名匹配提供的模式
-newer file比file文件新;
[actions] -print打印文件名;-ls 对当前文件使用ls -dils;-ok command执行命令提示确认,使用\;字符对来结束;-exec command执行一条命令
命令示例:
find /root -name abc -print;在/root目录下查找文件名为abc的文件
find / -mount -name abc -print
find . -newer file -type f -print

正则表达式是处理字符串的标准方式,他的支持工具,最简单的是grep
grep命令:全称是Global Regular Expression Print
grep [options] pattern filename;pattern为正则表达式,options如下,
-c:只输出匹配行的计数。
-i:忽略大小写。
-n:显示匹配行及行号。
-v:显示不包含匹配文本的所有行。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-s:不显示不存在或无匹配文本的错误信息。

正则表达式
[],匹配一个指定范围内的一个字符,如'[Gg]rep'匹配Grep和grep。
eg:grep -n '[Gg]rep' filename
反向符号^,
eg:grep -n '[^g]oo'//匹配oo前不是g的文本行,^在[]内表示反向符号
行首符号^,
eg:grep -n '^[^A-Za-z]' filename//匹配行首不是字母的文本行,注意反向符号和行首符号的区别。
行尾符号$,^M为windows下的换行符
eg:grep -v '^[$#]' filename//过滤空白行和注释行(设#为注释符号,如Shell脚本makefile文件等)
.一个任意字符,*(0个或者多个,bash中表示任意字符串)
eg:grep -n 'g.*g' filename// 匹配g开头g结尾的字符串    
 \<: 表示词首. 如 \ \>: 表示词尾. 如 abc\> 表示以 abc 结尾的词.
限定范围字符{},
grep -n 'go\{2,5\}' filename//匹配g后面跟2-5个o的文本行
grep -n 'go\{2,\}' filename//匹配g后面跟2个以上o的文本行
?: 表示前一个char 的出現次数为 0 或 1 次. 如 ab?c 表示 a 与c 之间可有 0 或 1 个b 存在.

sed命令
sed是一种在线编辑器,一次处理一行数据。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),
接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
文件内容并没有 改变,除非你使用重定向存储输出。
sed命令格式:
sed [options] 'command' files
sed [options] -f scriptfile files;
-i 直接修改原文件。-e执行多个sed命令。
command如下,
-a新增一行,加到当前行的下一行
eg:sed '2a test' filename;在filename第2行之后添加一行文本,文本内容是test
-i插入到当前行的上一行,sed '2i test' filename;在filename第2行之前添加一行文本,文本内容是test,
-d,删除数据
eg:sed '2,5d' filename;删除filename2-5行
    sed '2d' filename;只删除filename第2行
    sed '2,$d'filename;删除filename第2行之后所有文本
    
    -s,搜索和替换
[address,[address]]s/pattern-find/replacement-pattern/[gpwn]
g,global每一行的所有匹配进行全局替换,默认情况下只替换第一个;
sed  's/1/2/g' sample,把文件sample中的1全部替换成2
sed '/two/ s/1/2/g' sample,把匹配two的行中的1全部替换成2

awk命令
awk语言最基本的功能是在文件或字符串中基于指定的规则浏览和抽取信息,倾向于一行中分成数个
“字段”来处理数据,数据多为结构化数据源(类似于小型数据库,例如有规则的文件)
awk命令格式:
awk 'type{action1} type{action2} ...' filename
字段分割符默认为空格与tab

$0为一整行数据,$1,$2,...分别为第一个数据第二个数据
awk的内置变量:
NF 每行拥有的字段总数
NR 当前awk处理的是第几行
FS 当前的分割符
awkfile原文件内容:
ID      Name    Score   Deptname        Others
1       Bao     90.0    Physics
2       Antique 90.5    Mathmetics
3       Elder   91.5    Computer        major
4       Pig     92.7    Software        major
5       Monkey  93.2    Software
6       Nothing 94.9    Mathmetics      major
7       Secret  95.0    Fore....        major


显示详细信息
awk 'NR==1{print "行\t字段数\t" $0}NR>1{print NR-1 "\t" NF "\t" $0}' awkfile
result:

行      字段数  ID      Name    Score   Deptname        Others
1       4       1       Bao     90.0    Physics
2       4       2       Antique 90.5    Mathmetics
3       5       3       Elder   91.5    Computer        major
4       5       4       Pig     92.7    Software        major
5       4       5       Monkey  93.2    Software
6       5       6       Nothing 94.9    Mathmetics      major
7       5       7       Secret  95.0    Fore....        major

#!/bin/bash
echo "/etc/passwd"
cat /etc/passwd
echo "awk FS=: 第一行不起作用"
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}'
echo "awk FS=: 第一行起作用"
cat /etc/passwd | awk 'BEGIN{FS=":"} $3 < 10{print $1 "\t" $3}'

BEGIN,打印报告头
END,打印信息尾
打印语句print,printf语句与C语言相同
{}中语句支持if

以下部分摘自博客http://blog.csai.cn/user1/27828/archives/2007/14197.html
1).保存awk输出: #awk '{print $0}'  myfile>newfile
2).使用tee,在输出到文件的同时输出到屏幕(利用管道'|')
     #awk '{print $0}' myfile |tee newfile
3).打印报告头,#awk 'BEGIN {print "hello,this is Title\n---------"}{print $0}' newfile
4).打印信息尾.#awk 'BEGIN{print $0} END {"end of file."}' myfile
5).匹配,如下若在myfile第二列中带有BROWN,则打印信息
     #awk '{if ($2~/BROWN/) print $0}' myfile
6).精确匹配,同上,只是将~改为==
7).不匹配,有时要浏览信息并抽取不匹配操作的记录,与~相反的符号是!,如下
#awk '$0 !~/BROWN/' myfile
8).比较
 如小于: #awk 'if ($1<$2) print $1' myfile
9).设置大小写 #awk '[Gg]reen/' myfile
10).任意字符,表达式/^...a/意为前三个字符是任意字符
  #awk '$1~/^...a/' myfile
11).或关系匹配,#awk '$0~/(YELLOW || RED)/' myfile
12).与:&& ,或:||
13).awk内置变量
 <1>.要快速查看记录个数,应使用NR,如:#awk 'END {print NR}' myfile <2>.以下使用NF变量显示每一条读记录中有多少个域,并在END部份  打印输入文件名。#awk '{print NR,NF,$0} END {print FILENAME}' myfile
<3>. 判断并输出 . #awk '{if(NR>0 && $4~/BROWN/) print $0' myfile
14).可以设置输入域到域变量名。
15).域值比较操作。
   @1.在BEGIN中给变量名赋值。通常在BEGIN部分赋值是很有益的,可以在awk表达式进行改动时减少很大麻烦.
   @2.在关系操作中使用实际数值,使用关系操作时必须用括号括起来.
 #awk '{if($6<27) print $0}' myfile
 #awk 'BEGIN {BASELINE="27"}{if ($6   17).修改数据域取值
 当在awk中修改任何域时,重要的一点是实际的文件可修改,改动的是cache中的awk复本,awk会在变量NR或NF中反映出修改的痕迹。
#awk '{if($1=="M.TANS")$6=$6-1;print $6}' myfile
18).修改文本域
 #awk '{if($1=="J.Troll")($1="J.L.Troll");print $1}' myfile
19).只显示修改记录
#awk '{if($1=="J.Troll"){$1="J.L.Troll";print $1}}' myfile
20).创建新的输出域
在awk中处理数据时,基于各域进行计算的创建新域是个好的习惯。如下示例:
 #awk 'BEGIN{print "Name    Score\t"}if($6<$7){$8=$7-$6;print $8}' myfile
21).增加列值
 #awk 'tot+=$6;END{print "Club Total point." tot}' myfile
22).使用模式打印文件名及其长度,放入变量tot中
#ls -l | awk'/^[^d]{print $9 "\t" $5}{tot+=$5} END {print "Total KB:tot"}'
23).awk内置的字符串函数
24).awk脚本文件
如以上的所述的诸多情况,这里只不过命令放在一个文件中,且该文件必须是!/bin/awk -f ,因为这样才会使这个文件可以自解释。否则将不能作用。为了容易分别,最好将文件带一个扩展名.awk,完
成对文件的编写后,再利用chmod  u+x使文件可以执行。



 


 

你可能感兴趣的:(Unix环境高级编程)