1.getopts

  unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式: 
  command -options parameters 
  如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。该语句的格式为: 
  getopts option_string variable 
  其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。

while getopts "rso" arg ; do
case $arg in
  r )
rebuild=-r
  ;;
s )
  small=-s
  ;;
o )
  optim=-o
  ;;
? ) # 不认识
  echo error
  echo -e $usage
  exit 1
  ;;
  esac
done

2.sed

sed编辑器逐行处理输入,然后把结果发送到屏幕。

-i选项:直接作用源文件,源文件将被修改。

sed命令和选项:

a\ 在当前行后添加一行或多行
c\ 用新文本替换当前行中的文本
d 删除行
i\ 在当前行之前插入文本
h 把模式空间的内容复制到暂存缓冲区
H 把模式空间的内容添加到缓冲区
g 取出暂存缓冲区的内容,将其复制到模式缓冲区
G 取出暂存缓冲区的内容,将其追加到模式缓冲区
l 列出非打印字符
p 打印行
n 读入下一行输入,并从下一条而不是第一条命令对其处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的行应用所有命令
s 用一个字符串替换另外一个字符串

替换标志:

g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区和模式空间的内容
y 将字符转换成另外一个字符

sed例子:

打印:p命令

sed ‘/abc/p’ file

打印file中包含abc的行。默认情况sed把所有行都打印到屏幕,如果某行匹配到模式,则把该行另外再打印一遍

sed  -n ‘/abc/p’ file 和上面一样,只是去掉了sed的默认行为,只会打印匹配的行

删除:d命令

sed ‘3,$d’ file    删除从第3行到最后一行的内容。
sed ‘$d’ file 删除最后一行的内容
sed ‘/abc/d’ 删除包含abc的行。
sed ‘3d’ file 删除第三行的内容

替换:s命令

sed  ‘s/abc/def/g’ file 把行内的所有abc替换成def,如果没有g,则只替换行内的第一个abc
sed  -n ‘s/abc/def/p’ file 只打印发生替换的那些行
sed  ‘s/abc/&def/’ file 在所有的abc后面添加def(&表示匹配的内容)
sed  -n ‘s/abc/def/gp’ file 把所有的abc替换成def,并打印发生替换的那些行
sed  ‘s#abc#def#g’ file 把所有的abc替换成def,跟在替换s后面的字符就是查找串和 
替换串之间的分割字符,本例中试#

指定行的范围:逗号

sed  -n ‘/abc/,/def/p’ file 打印模式abc到def的行
sed  -n ‘5/,/def/p’ file 打印从第五行到包含def行之间的行。
sed /abd/,/def/s/aaa/bbb/g 修改从模式abc到模式def之间的行,把aaa替换成def

多重编辑-e

sed  -e ‘1,3d’ -e ‘s/abc/def/g’ file 删除1-3行,然后把其余行的abc替换成def

读文件:r命令

sed  ‘/abc/r newfile’ file 在包含abc的行后读入newfile的内容

写文件:w命令

sed  ‘/abc/w newfile’ file 在包含abc的行写入newfile

追加:a命令

sed  ‘/abc/a\def’ file 在包含abc的行后新起一行,写入def

插入:i命令

sed  ‘/abc/i\def’ file 在包含abc的行前新起一行,写入def

修改:c命令

sed  ‘/abc/c\def’ file 在包含abc的行替换成def,旧文本被覆盖

读取下一行:n命令

sed  ‘/abc/{n ; s/aaa/bbb/g;}’ file 读取包含abc的行的下一行,替换aaa为bbb

转换:y命令

sed  ‘y/abc/ABC’ file 将a替换成A,b替换成B,c替换成C(正则表达式元字符不起作用)

退出:q命令

sed  ‘/abc/{ s/aaa/bbb/ ;q; }’ file 在某行包含了abc,把aaa替换成bbb,然后退出sed。

暂存和取用:h命令(把模式行存储到暂存缓冲区)和g(取出暂存缓冲区的行并覆盖模式缓冲区)G(取出临时缓冲区的行)命令

h和g是复制行为(覆盖),H和G表示追加。    

sed  -e ‘/abc/h’  -e ‘$G’ file 包含abc的行通过h命令保存到暂存缓冲区,在第二条命令汇中,sed读到最后一行$时,G命令从暂存缓冲区中读取一行,追加到模式缓冲区的后面。即所有包含abc的行的最后一行被复制到文件末尾。
sed -e ‘/abc/{h; d;}’
      -e  ‘/def/{g; }’ file
包含abc的行会移到包含def的行上,并进行覆盖。

暂存和互换:h和x命令

sed  -e ‘/abc/h’  
-e ‘/def/x’ file
包含abc的行会被换成def的行。

转载于:https://www.cnblogs.com/live-in-city/p/3494171.html

shell 指令使用整理相关推荐

  1. linux shell指令大全整理

    linux shell指令 shell是一种脚本语言, 需要有编译器执行 bash是linux下默认的shell sh是unix下默认的shell 在ubuntu中bash和sh都可用 执行 #!/b ...

  2. php exec执行多条命令,小技巧:在PHP中调用多条shell指令

    原标题:小技巧:在PHP中调用多条shell指令 有时候,在持续集成的过程中,需要通过网页在目标服务器上执行shell指令,今天就列举一个实例进行讲解. 比如,我们需要能通过网页将SVN update ...

  3. linux shell 指令 诸如-d, -f, -e之类的判断表达式(转)

    linux shell 指令 诸如-d, -f, -e之类的判断表达式(转) 一.文件比较运算符 e filename 如果 filename存在,则为真 如: [ -e /var/log/syslo ...

  4. 随手记——Linux中C语言调用shell指令的三种方式

    在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习.我的使命就是过滤掉大量的无效信息,将知识体系化,以短平快的方式直 ...

  5. gitlab runner下载安装注册+卸载 + shell指令没执行的问题

    什么是gitlab CI/CD 简单来说,CI的作用是验证提交的代码是否符合规范.主要起到一个验证的作用.CD的作用主要是部署,测试环境的部署,正式环境的发布,制品的生成,镜像的构建. Runner ...

  6. shell指令可以直接在终端输入吗_shell不是LInux系统的壳吗?咋还能脚本编程了?...

    小豆丁:老张!老张!你快来! 老张:咋啦?火烧屁股啦?急急忙忙的! 小豆丁:啥火烧屁股啊,我是遇到问题了! 老张:也对,你只有遇到问题的时候才会找我!说吧,啥事? 小豆丁:老张啊,你不是刚给我讲完Li ...

  7. 经典shell面试题整理

    一.取出/etc/passwd文件中shell出现的次数 问题:下面是一个/etc/passwd文件的部分内容.题目要求取出shell并统计次数,shell是指后面的/bin/bash,/sbin/n ...

  8. shell 指令集锦

    0 shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁. Shell 既是一种命令语言,又是一种程序设计语言. Shell 脚本(shell script),是 ...

  9. linux shell指令 amp,shell入门基础amp;常见命令及用法

    shell shell是一个命令解释器,实际是一个程序,/bin/bash,linux中所有的命令都由它来解释,有自己的语法 shell脚本 以.sh结尾 shell语法+linux命令 注释: 单行 ...

最新文章

  1. 逐飞关于第15届智能车竞赛相关工作
  2. Ajax的get、post和ajax提交
  3. java+getactionmap_Struts2 使用OGNL遍历map方法详解
  4. Java根据出生年月日获取到当前日期的年月日
  5. python如何监听toast提示信息_python 怎样获取toast?
  6. mysql子查询更改指定数据库_MySQL数据库update更新子查询
  7. Silverlight与微软技术:微软抛弃Silverlight了吗?
  8. OpenCV阈值分割
  9. 萤石开放平台——摄像头画面怎么完成一键分享?
  10. 解决鼠标滚动时页面上下跳动的问题
  11. excel服务器文件只读,excel只读服务器
  12. 车路协同、智慧交管、自动驾驶场景应有尽有,智能交通行业实战课火爆开启...
  13. python调试程序的方法_调试Python程序的四种方法
  14. 凸集、凸函数与凸规划
  15. 网络版AIS接收机R400N
  16. 深入理解蓝牙5之高数据传输率
  17. 【nginx动静分离】
  18. 魔兽世界大秘境里服务器维护,魔兽世界9.0:不知道大秘境注意事项及优选职业?来这里我教你...
  19. 微信视频号直播1000个看过多少钱
  20. 能不能加个人物关系表?——《程序员羊皮卷》书评(5)

热门文章

  1. 20145237第六周学习总结
  2. jQuery的ajax()、post()方法提交数组,参数[] 问题
  3. Navigation Drawer详解-Google推出的用来取代Sliding Menu的控件(一
  4. 5.VMware View 4.6安装与部署-安装view agent与模版
  5. ASMCMD 命令详解
  6. Android 使用MediaPlayer播放assets或者raw目录的音频文件
  7. onnx模型推理(python)
  8. 使用TCP来进行数据通信
  9. pandas如何统计所有列的空值,并转化为list?
  10. 页面按钮埋点+跟踪location.search