shell笔记.docx_第1页
shell笔记.docx_第2页
shell笔记.docx_第3页
shell笔记.docx_第4页
shell笔记.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. wc -l 统计行数 wc -w统计单词数 wc -c统计字符 eg.who | wc -l 统计当前用户个数2. cat file显示文件内容3. ls -al 显示隐藏文件4. ./main & 后台执行程序5. echo -n enter your name 加上-n 会省略结尾处的换行符6. echo 转义字符 b 退格 f 清除屏幕 n换行 r回车 t水平制表符 a警示,引起用户注意7. printf today i made mistakesn printf enter8. 改变标准输出 目的文件不存在时,新创建,已存在,内容覆盖 附加到文件,目的文件不存在时,新创建,已存在,追加到文件结尾 eg.for f in dos-file*.txt do tr -d r big-UNIX-file.txt / tr -d r删除文件中的回车字符 done9. 管道 program1 | program2 将file1的输出修改为file2的输入10. tr options source-char-list replace-char-list 将source-char-list替代为replace-char-list option: -c 取source-char-list的反义 要转换的字符,变成未在source-char-list中的字符 -d 删除source-char-list里所列的字符 -s tr -s 浓缩重复字符成一个 11. /dev/null 位桶 传送到此文件的数据会被系统丢掉12. grep 过滤 who | grep root13. 执行跟踪 sh -x update.sh 会显示每个被执行的命令;或者在脚本中用set -x将执行跟踪功能打开,set +x 关闭它14. echo $PATH列举所有shell会在目录中查找命令。可以再.profile文件中将自己bin目录加到PATH中。15. 查找文本 Grep grep options. pattern-specfiles. 显示匹配一个多个模式文本行,常作为管道的第一步 -E 使用扩展正则表达式匹配, grep -E = egrep -F 使用固定字符串进行匹配 fgrep -e pat-list 提供多个模式,放在引号里以换行符分隔 -f pat-list 从pat-list文件中读取模式做匹配 -i 匹配忽略大小写 -l 列出匹配模式的文件名,而不是打印匹配的行 -q 若匹配成功,grep成功离开,不将匹配的行写入标准输出;否则不成功 -s 不显示错误信息 常与-q并用 -v 显示所有不匹配模式的行16.单个字符匹配* 转义字符 metacharacher 简写meta . 表示任一字符 a.c 匹配abc aac 匹配单个字符 aeiouy eg.caeiouyt 匹配cat cot cit; 方括号中,放在字首取反, aeiouy指的是小写元音字符以外的任何字符;方括号可以包括字符范围,如0-9 0-9a-fA-F17.匹配多个字符POSIX字符集:alnum: 数字字符 :alpha:字母字符:blank: 空格与定位(tab) :cntrl:控制字符:digit:数字字符 :graph:非空格字符:lower:小写字母字符 :print:可现实字符:punct:标点符号字符 :space:空白字符:upper: 大写字母字符 :xdigit:十六进制数字 * 表示匹配0个或多个前面的单个字符 eg. ab*c 匹配1个a、0个或多个b字符以及ac ac,abc,abbbc区间表达式 n 前面正则表达式结果重复n次 n, 。至少n次 n,m 。n到m次 n,m 0-255? 匹配0个或1个前置正则表达式 ab?c ac abc+ 匹配1个或多个前置表达式 ab+c abc abbc abbbc 但不能是ac18.锚点: $ abcABCdefDEFABC 居中的4,5,6个字ABC 限定匹配字符串的起始处def$ 限定匹配字符串的结尾处:upper:3$ 结尾处的10 11 12个字符eg. grep -v $ foo.out 删除foo.out中的空白行 起始 $ 结尾 19. 交替 | 管道 read |write | sleep 匹配序列20 .文本替换 Sed选项与参数:-n : 取消默认输出。使用安静(silent)模式。在一般 sed的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。-e :直接在命令列模式上进行 sed的动作编辑;-f :直接将 sed的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed动作;-r :sed的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)-i :直接修改读取的文件内容,而不是输出到终端。动作说明: n1,n2functionn1, n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则 10,20动作行为 function:a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)b lable :分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!d :删除,从模板块位置删除行,因为是删除,所以 d 后面通常不接任何咚咚;D:删除模板块的第一行。i :插入, i 的后面可以接字串,在当前行上面插入文本。P :打印模板块的第一行。s :取代,通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g new 代替old q :退出Sed。h :拷贝模板块的内容到内存中的缓冲区。 H :追加模板块的内容到内存中的缓冲区 g :获得内存缓冲区的内容,并替代当前模板块中的文本。 G :获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l :列表不能打印字符的清单。 n :读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N :追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 r file :从file中读行。 t label :if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令 处,或者到脚本的末尾。 T label :错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 w file :写并追加模板块到file末尾。 W file :写并追加模板块的第一行到file末尾。 ! :表示后面的命令对所有没有被选定的行发生作用。 = :打印当前行号码。 # :把注释扩展到下一个换行符以前。以下的是替换标记 g:表示行内全面替换。 p:表示打印行。通常 p 会与参数 sed-n 一起运行 w:表示把行写入一个文件。 x:表示互换模板块中的文本和缓冲区中的文本。 y:表示把一个字符翻译为另外的字符(但是不用于正则表达式)元字符集 锚定行的开始 如:/sed/匹配所有以sed开头的行。 $ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。 * 匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 匹配一个指定范围内的字符,如/Ssed/匹配sed和Sed。 匹配一个不在指定范围内的字符,如:/A-RT-Zed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 (.) 保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/*&*/,love这成*love*。 锚定单词的结束,如/love>/匹配包含以love结尾的单词的行。 xm 重复字符x,m次,如:/05/匹配包含5个o的行。 xm, 重复字符x,至少m次,如:/o5,/匹配至少有5个o的行。 xm,n 重复字符x,至少m次,不多于n次,如:/o5,10/匹配5-10个o的行。eg.sed /$/d filename 可以删除文件中的空行。sed /:space:*$/d filename 可以删除内容为多个空格/tab组成的行。 cat filename | sed n /1024/p 打印出含有字串”1024”的行删除:d命令$ sed 2d example-删除example文件的第二行。 $ sed 2,$d example-删除example文件的第二行到末尾所有行。 $ sed $d example-删除example文件的最后一行。$ sed /test/d example-删除example文件所有包含test的行。替换:s命令$ sed s/test/mytest/g example-在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。 $ sed -n s/test/mytest/p example-(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。 $ sed s//&localhost/ example-&符号表示替换换字符串中被找到的部份。所有以开头的行都会被替换成它自已加 localhost,变成localhost。$ sed -n s/(love)able/1rs/p example-love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。$ sed s#10#100#g example-不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。选定行的范围:逗号 $ sed -n /test/,/check/p example-所有在模板test和check所确定的范围内的行都被打印。 $ sed -n 5,/test/p example-打印从第五行到第一个包含以test开始的行之间的所有行。 $ sed /test/,/check/s/$/sed test/ example-对于模板test和west之间的行,每行的末尾用字符串sed test替换。多点编辑:e命令 $ sed -e 1,5d -e s/test/check/ example-(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。$ sed -expression=s/test/check/ -expression=/love/d example-一个比-e更好的命令是-expression。它能给sed表达式赋值。从文件读入:r命令 $ sed /test/r file example-file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。 写入文件:w命令 $ sed -n /test/w file example-在example中所有包含test的行都被写入file里。 追加命令:a命令$ sed /test/a->this is a example example<-this is a example被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。插入:i命令 $ sed /test/inew line- example如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。下一个:n命令 $ sed /test/ n; s/aa/bb/; example-如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。 变形:y命令$ sed 1,10y/abcde/ABCDE/ example-把1-10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。 退出:q命令 $ sed 10q example-打印完第10行后,退出sed。保持和获取:h命令和G命令 $ sed -e /test/h -e $G example-在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。保持和互换:h命令和x命令 $ sed -e /test/h -e /check/x example -互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。nl /etc/passwd | sed 2,5d将 /etc/passwd 的内容列出并且列印行号,同时,请将第 25 行删除nl /etc/passwd | sed 3,$d要删除第 3 到最后一行 nl /etc/passwd | sed 2a drink tea 在第二行后(亦即是加在第三行)加上drink teanl /etc/passwd | sed 2,5c No 2-5 number将第2-5行的内容取代成为No 2-5 numbernl /etc/passwd | sed -n 5,7p 仅列出 /etc/passwd 文件内的第 5-7 行nl /etc/passwd | sed /root/p 搜索 /etc/passwd有root关键字的行,使用-n将只打印包含模板的行。nl /etc/passwd | sed /root/d删除/etc/passwd所有包含root的行,其他行输出nl /etc/passwd | sed -n /root/s/bash/blueshell/;p 搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行sed s/要被取代的字串/新的字串/g 用行为单位进行部分数据的搜寻并取代rootwww # /sbin/ifconfig eth0 查eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84inet addr:00 Bcast:55 Mask:将 IP 前面的部分予以删除/sbin/ifconfig eth0 | grep inet addr | sed s/.*addr:/g将 IP 后面的部分予以删除rootwww # /sbin/ifconfig eth0 | grep inet addr | sed s/.*addr:/g | sed s/Bcast.*$/g一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshellnl /etc/passwd | sed -e 3,$d -e s/bash/blueshell/利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !rootwww # sed -i s/.$/!/g regular_express.txt利用 sed 直接在 regular_express.txt 最后一行加入# This is a testrootwww # sed -i $a # This is a test regular_express.txt21. cut 剪下文本文件中的数据22. join 链接多个文件,每个文件里的记录,都含有共同的键值 join options file1 file2 -1 field1 -2 fileld 表明要结合的字段 -o file.field 输出file文件中的field字段 -t separator 作为输入字段分隔字符 join -t: $file1 $file2 将文件组合字段以:分隔开23. awk 重新编排字段 编程语言 awk程序基本架构为:pattern action awk NF 0 print $0 pattern 几乎是任何表达式;action为任意awk语句,通常为print语句 awk读取命令行上所指定的各个文件,一次读一行,若无,从标准输入读取。自动将读取的记录切分为字段,将每条及记录内的字段数目,存储到内建变量NF awk -F: -v OFS=* print $1,$5 /etc/passwd 显示文件里的用户名称与全名 $0显示整条记录 $5第五个字段 awk默认分隔方式FS为空格,-v OFS=* 可以设置输出字段分隔字符为* BEGIN/END提供awk的起始于清除操作,通常写在文件中 eg: BEGIN 起始代码 pattern1 action1 pattern2 action2 END 清除程序代码 eg. awk BEGIN FS = : ; OFS = * print $1,$5 /etc/passwd 排序文本24. 行的排序 sort options file(s) 将输入行按照键值字段与数据类型以及Locale排序 -b 忽略开头的空白 -c 检查输入是否已正确排序 -d 字典顺序:仅文字数字与空白才有意义 -g 一般数值:以浮点数类型比较字段 -f 不区分大小写排序 -i 忽略无法打印的字符 -k 定义排序键值字段 -m 将已排序的输入文件,合并为一个排序后的输出数据流 -n 以整数类型比较字段 -o outfile 将输出写到制定的文件 -r 倒置排序的顺序为从大到小 -t char 使用单个字符作为默认的空白字符字段分隔字符 -u 丢弃所有具有相同键值的记录,只留有其中一条25. 字段排序 用 -k 选项制定排序字段,并用-t 选择字段定界符,若为制定-t,则表示以空白分隔且记 录开头与结尾的空白都将被忽略,若制定,则空白是有意义的eg. 字段和字符位置是从0开始编号 键值从字段n中的字符m开始,定义:+n.m, 以-n.m结束 (键值的排序)sort +2.1 -3.2 =sort -k3.2,4.3(字段排序) sort -t: -k1,1 -k2,2 /etc/passwd 以用户名称排序 sort -t: -k3nr /etc/passwd 反向UID排序sort -t: -k3nr,3 /etc/passwd从字段3起始开始,以数值类型反向排序,结束与字段3结尾26. 文本块排序 利用awk处理段落间的段落间隔,用一个无法打印的控制字符代替,排序后再以换行取代 段落标记 eg. cat my-friend | 在地址数据文件里的管道 awk -v RS= gsub(n, Z); print | 转换地址为单个行 sort -f | 排序地址数据,忽略大小写 awk -v ORS=nn gsub(Z, n); print | 恢复行结构 grep -v # SORTKEY 删除行标记 gsub()函数功能为全局性替换 RS= 是指记录以空行的方式隔开 ORS指输出记录分隔器,以print输出的每条记录后都会以其

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论