设为首页 收藏本站
查看: 721|回复: 0

Linux用户管理(十)Linux Shell高级

[复制链接]

尚未签到

发表于 2018-8-22 13:54:06 | 显示全部楼层 |阅读模式
  Shell高级
  一.        shell置换和引用
  1.什么是置换和引用
  在shell中具有很多特殊意义的字符(*、?、\等),shell将包含元字符的字符串根据其意义转换成新字符串的过程称为置换;关闭shell对特殊字符含义的解析处理被称为引用。
  2.Shell置换的类型
  (1)       文件名置换
  l 元字符
  -* 匹配所有字符
  -? 匹配所有单个字符
  -[]  匹配括弧内的字符
  -[!] 匹配除括弧内的其他字符
  l 实例
  -#ls  abc*
  -#ls  ?abc
  -#ls  [abc]*
  -#ls  [!a]*
  (2)       变量置换
  l $varname和${varname}  置换变量的值,引用指定变量名的值
  l ${varname:+value}   判断varname变量是否设置,如果设置了,则显示value,否则显示空
  l ${varname:?value}  如果变量varname变量未设置/为空,则显示错误信息value
  l ${varname:-value}  如果变量varname变量未设置/为空,则显示value
  l ${varname:=value}  如果变量varname变量未设置/为穿,则显示value,并将value值赋给varname变量
  (3)       命令置换
  l 使用`命令`,置换命令的结果。如cat `ls /etc/grub.conf`
  l 使用$(命令)方式置换命令的结果。如cat $(ls /etc/grub.conf)
  (4)       运算式置换
  l 使用$((算术表达式))置换表达式的结果。如a=$( (1 + 1 ))
  l 使用declare/let定义整型变量和给变量赋值。如let a=5+5
  3.Shell引用
  l  使用“\”取消其后面的特殊字符的含义,特殊字符有* ? [] ‘ ’  “ ”  \ $ ; & ( ) | ^ ! #;如“abc\*”.
  l 使用‘’引用所有被括起来的字符,如echo ‘$a*’
  l  使用“”引用所有除$和`以外的字符
  二.        文本过滤
  1.什么是文本过滤
  文本过滤指的是提取指定文件中的部分内容或替换指定文本文件中的字符串
  2.文本过滤的命令
  (1)     head
  功能:输出文件头部n行
  格式:head  -n 文件名
  实例:#head -3  /etc/passwd
  (2)     tail
  功能:输出文件尾部n行或监控文件
  格式:tail +n/-n/-f  文件
  实例:#tail –3 /etc/passwd
  #tail +3 /etc/passwd
  #tail –f /etc/passwd
  (3)     uniq
  功能: 检查及删除文本文件中重复出现的行列
  格式: uniq [选项] [输入文件][输出文件]
  选项:
  -c   在每列旁边显示该行重复出现的次数。
  -d  仅显示重复出现的行列。
  -f   忽略比较指定的栏位。
  -s  忽略比较指定的字符。
  -u   仅显示出现一次的行。
  -w  指定要比较的字符。
  实例:
  #uniq  -u  /root/aa
  #uniq  -dc /root/aa
  (4)     sort
  功能:对文件进行排序/合并
  格式:sort  [选项]  文件名
  选项:
  -d:按字典顺序(只对空格/字母/数字)
  -f:忽略大小写
  -t:指定分隔符
  -r反向
  -n按数字大小显示
  -c只检查是否有序,不实际排序
  -u消除重复行
  实例:
  #sort -r  /etc/passwd
  #sort +1-2  /etc/passwd
  (5)     grep
  功能:在文本文件中查找匹配的字符串
  格式:#grep [参数] “字符串”  文件
  参数:
  -?   同时显示匹配行上下的?行
  -b   在匹配行前面打印该行所在的块号
  -c   只打印匹配的行数,不显示匹配的内容
  -f File 从文件中提取模板,空文件中包含0个模板,所以什么都不匹配
  -h   当搜索多个文件时,不显示匹配文件名前缀
  -I   忽略大小写差别
  -q   取消显示,只返回退出状态。0则表示找到了匹配的行
  -l   打印匹配模板的文件清单
  -L   打印不匹配模板的文件清单
  -n   在匹配的行前面打印行号
  -s   不显示关于不存在或者无法读取文件的错误信息
  -v   反检索,只显示不匹配的行
  -w   如果被\引用,就把表达式做为一个单词搜索
  正则表达式元字符:
  ^
  锚定行的开始 如:'^grep'匹配所有以grep开头的行
  $
  锚定行的结束 如:'grep$'匹配所有以grep结尾的行
  .
  匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p
  *
  匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。.*一起用代表任意字符
  []
  匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep
  [^]
  匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行
  \(..\)
  标记匹配字符,如'\(love\)',love被标记为1
  \<
  锚定单词的开始,如:'\'匹配包含以grep结尾的单词的行
  x\{m\}
  重复字符x,m次,如:'0\{5\}'匹配包含5个o的行
  x\{m,\}
  重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行
  x\{m,n\}
  重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行
  实例:
  # ls -l | grep '^a'
  通过管道过滤ls-l输出的内容,只显示以a开头的行。
  # grep 'test' d*
  显示所有以d开头的文件中包含test的行。
  # grep 'test' aa bbcc
  显示在aa,bb,cc文件中匹配test的行。
  # grep '[a-z]\{5\}'aa
  显示所有包含每个字符串有5个连续小写字符的字符串的行。
  # grep 'w\(es\)t.*\1'aa
  如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。
  (6)     sed
  功能:Sed(a stream editor)是流线型、非交互式编辑器。它允许你执行与vi编辑器里一样的编辑任务。Sed 程序不是与编辑器交互式工作的,而是让你在命令行里敲入编辑的命令,给文件命名,然后在屏幕上查看命令输出结果。
  格式:sed   [选项]   sed子命令 输入文件  [输出文件]
  子命令:
  p 打印匹配行
  = 显示文件行号
  a \ 在定位行号后附加新文本信息
  i \ 在定位行号前插入新文本信息
  d 删除定位行
  c \ 用新文本替换定位文本
  s 使用替换模式替换相应模式
  r 从另一个文件中读文本
  w 写文本到一个文件
  q 第一个模式匹配完成后推出或立即推出
  { } 在定位行执行的命令组
  n 从另一个文件中读文本下一行,并附加在下一行
  y 传送字符
  n 延续到下一输入行;允许跨行的模式匹配语句
  实例:
  1> 打印:p命令
  #sed '/north/p'datafile
  默认输出所有行,找到north的行重复打印
  #sed –n '/north/p'datafile
  禁止默认输出,只打印找到north的行
  #sed -n'/west/,/east/p' datafile
  打印在west和east之间的模式范围内所有行。
  2> 删除:d命令
  #sed '3d' datafile
  删除第三行,其余行输出到屏幕
  #sed '3,$d' datafile
  从第3行到最后一行都删除,将剩余部分输出到屏幕
  #sed '/north/d'datafile
  将含有north的行删除,其余输出到屏幕
  3> 替换:s命令
  #sed 's/west/north/g'datafile
  找到datafile中的所有west并替换成north,将替换后的内容输出到屏幕。
  #sed -n's/Hemenway/Jones/gp' datafile
  所有的Hemenway所在的位置都用Jones来取代,而且只有改变的行被打印。
  #sed -n's/\(Mar\)got/\1ianne/p' datafile
  模式Mar被封装在括弧里且在一个专用寄存器里存为标记1。在替换串里它将被引用做\1。然后用Marianne替代Margot。
  4> 多次编辑 -e 选项
  #sed -e '1,3d' -e's/Hemenway/Jones/' datafile
  5> 从文件中读取:r命令
  #sed '/Suan/rnewfile' datafile
  r命令从newfile中读取内容,将内容输出到Suan的后面。
  6> 写入文件:w命令
  #sed -n '/north/wnewfile' datafile
  w命令把指定的行写入到一个文件。
  7> 添加:a命令
  #sed '/north/a\ THENORTH SALES DISTRICT HAS MOVED

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-555192-1-1.html 上篇帖子: shell并发上传ftp 下篇帖子: shell 写登录跳板机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表