shell变量赋值格式:

变量名=变量的值

当行可进行多次赋值,只要用空格把各个赋值表达式分割开,变量的值中有空格时使用双引号扩起来


echo命令默认输出换行符,加-n参数不输出换行符

也可以使用printf命令输出

printf format-string [arguments …]


重定向与管道

以<改变标准输入

以>改变标准输出

以>>附加到文件

以|建立管道


字符替换,转换字符。例如大小写转换,删除指定字符,去掉重复字符

tr [options] source-char-list replace-char-list

常用选项:

-c

取source-char-list的反义,通常和-d、-s配合使用

-C

与-c相似,但所处理的是字符(可以是包含多字节的宽字符),而非二进制的字节值。

-d

自标准输入删除source-char-list里的字符

-s

浓缩source-char-list里的字符

警告:

根据posix标准定义,-c处理的是二进制字节值,而-C处理的是现行locale所定义的字符。


访问Shell脚本的命令行参数:

$0 $1 $2 $3 … … $9 ${10} ${11} … …

ctrl + D <==> EOF 即End Of File,文件结尾,通常用在cat命令输入结束时输入


简单的调试shell命令:

shell执行跟踪就是简单的使得shell显示每一条被执行到的命令。

  • sh –x <要调试的shell脚本名字>
  • 在shell脚本中使用set -x打开调试,使用set +x关闭调试

查找与替换:

grep [options] pattern-spec [files …]

用途:显示匹配一个或多个模式的文本行。

选项:

-E

使用扩展正则表达式进行匹配。

-F

使用固定字符串进行匹配。

-e pat-list

指定要匹配的模式,也可以提供多个模式,只要将他们放在引号里并以换行字符分割他们。模式以-开头时grep会误认为是选项。

-e选项就派上用场了,他后面的-开头的视为模式。

-f pat-file

从pat-file文件读取模式做匹配。

-i

忽略大小写

-l

列出匹配模式的文件名称,而不是打印匹配行

-q

静默的,如果有匹配行命令结果就是成功的,否则失败。

-s

不显示错误信息。通常与-q并用

-v

显示不匹配模式的行。

正则表达式速查表

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。
^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
{n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
. 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。
(pattern) 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。
(?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
(?<=pattern) 反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern) 反向否定预查,与正向否定预查类拟,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
[xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
\<the\> 匹配the整个单词
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
\d 匹配一个数字字符。等价于[0-9]。
\D 匹配一个非数字字符。等价于[^0-9]。
\f 匹配一个换页符。等价于\x0c和\cL。
\n 匹配一个换行符。等价于\x0a和\cJ。
\r 匹配一个回车符。等价于\x0d和\cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于\x09和\cI。
\v 匹配一个垂直制表符。等价于\x0b和\cK。
\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
\xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。.
\num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
\nml 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
\un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。

常用正则表达式

用户名 /^[a-z0-9_-]{3,16}$/
密码 /^[a-z0-9_-]{6,18}$/
十六进制值 /^#?([a-f0-9]{6}|[a-f0-9]{3})$/
电子邮箱 /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/
URL /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
IP 地址 /((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
HTML 标签 /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
删除代码\\注释 (?<!http:|\S)//.*$
Unicode编码中的汉字范围 /^[\u2E80-\u9FFF]+$/

sed [ –n ] ‘editing command’ [file …]

sed [ –n ] –e ‘editing command’ … [file …]

sed [ –n ] –f script-file … [file …]

用途

文本替换或编辑文件

选项:

-e ‘editing command’

-f script-file

-n 不是每个最后已修改结果行都正常打印,而是显示以p指定(处理过的)的行。

例如:

  1. sed ‘s/:.*//’ /etc/passwd | sort –u       删除第一个冒号之后的所有东西,排序并删除重复部分
  2. find /home/ –type d –print |             寻找所有目录

    sed ‘s;/home/it;/home/chenjun;’|     修改名称;注意这里使用分号为定界符

    sed ‘s/^/mkdir /’|                          插入mkdir 命令

    sh –x                                              以shell跟踪模式执行

editing commond开头的s是替换命令,如果命令以g结尾表示替代正则表达式中每一个匹配的,没有则只替换第一个,

g可以换成数字,表示替换第几个。

例如:

sed ‘s/:.*//2’ /etc/passwd      只删除第二个匹配的

打印与否

sed –n ‘/<HTML>/p’ *.html        仅显示<HTML>这行

匹配特定的行

address command

address可以为不同类型:

  1. 正则表达式

    /oldfunc/ s/$/# XXX: migrate to newfunc/   在匹配行结尾添加注释

    /Tolstoy/ s//& and Camus/g                       s命令里的空模式指的是”使用前一个正则表达式”

  2. 最终行

    符号$是“最后一行”打印最后一行

    sed –n ‘$p’ test.sh

  3. 行编号
  4. 范围

    sed –n ‘10,42p’foo.xml                  仅打印10~42行

    sed ‘/foo/,/bar/ s/baz/quux/g’         仅替换范围内的行

  5. 否定正则表达式

    sed '/{/!s/^#//g' test.sh                    删除没有{的行开头的#

使用sed模拟head命令:

count=$1

sed ${count}q “$2”           这里的q是指sed马上退出,不读后面的内容了

address中我们看到sed都是以/隔开模式以便查找。我们可以使用不同的定界符如:

转载于:https://www.cnblogs.com/chenjuncn/p/5188194.html

Shell脚步学习指南提点相关推荐

  1. Shell脚本学习指南(三)——文本处理工具

    文章目录 排序文本 行的排序 以字段的排序 文本块排序 sort的效率 sort的稳定性 sort小结 删除重复 重新格式化段落 计算行数.字数以及字符数 打印 打印技术的演化 其他打印软件 提取开头 ...

  2. Shell脚本学习指南(二)——查找与替换

    文章目录 前言 查找文本 简单的grep 正则表达式 什么是正则表达式 POSIX方括号表达式 基本正则表达式 匹配单个字符 后向引用 单个表达式匹配多字符 文本匹配锚点 BRE运算符优先级 匹配单个 ...

  3. 《Shell脚本学习指南》第一章 背景知识

    1.1 Unix简史 Unix第一版诞生于1970年,也就是贝尔实验室退出Multics项目不久. 在Unix广受欢迎的功能中,有许多是来自Multics操作系统. 其中最著名的有:将设备视为文件,以 ...

  4. linux 脚本 查找替换,Shell脚本学习指南之查找与替换介绍

    3.1 查找文本 grep:使用POSIX定义的基本正则表达式(BRE). egrep:使用扩展正则表达式(ERE). fgrep:快速grep.使用优化的算法,匹配固定字符串而非正则表达式. 199 ...

  5. 【Shell脚本学习指南笔记】重定向文件描述符 21

    如: make > results 2>&1 重定向 > results让文件描述符1(标准输出)作为文件results,接下来的重定向2>&1有两个部分.2& ...

  6. 《Shell脚本学习指南》读书笔记

    P30-31 软件工具的原则 1.一次做好一件事 2.处理文本行,不要处理二进制数据 3.使用正则表达式 4.默认使用标准输入/输出 5.避免喋喋不休 6.输出格式必须与可接受的输入格式一致 7.让工 ...

  7. Shell脚本学习指南(七)——产生脚本

    文章目录 前言 路径查找 软件构建自动化 前言 本篇,我们将进一步处理更复杂的工作.我们认为这里举出的例子都是一般用得到的工具,它们每一个都截然不同,且在大多数UNIX工具集里也没有. 在篇中的程序, ...

  8. linux shell脚本学习指南,shell脚本学习指南[二](Arnold Robbins Nelson H.F. Beebe著)

    该进入第四章了,刚才看到一个帖子标题:我空有一身泡妞的好本领,但可惜自己是个妞.汗-这个...音乐无国界嘛,这个不应该也没性别界么? 第四章文本处理工具 书中先说明了以下排序的规则,数值的就不用说了, ...

  9. Shell脚本学习指南 - 第二章入门篇

    shell脚本的第一行#! #! /bin/awk -f 内核会扫描文件开头的#!后面内容,跳过所有空白符号,寻求可以用来执行程序的解释器的full path和option(option后面的空格会识 ...

最新文章

  1. CGBitmapContextCreate参数详解
  2. linux暂停线程和恢复,是否有可能在Linux [暂停]中检测到线程已进行上下文切换?...
  3. tcp/ip 协议栈Linux源码分析四 IPv4分片 ip_fragment函数分析
  4. 时间固定效应和个体固定效应的选择_互助问答第31期:固定效应与随机效应选择和面板数据处理...
  5. keras从入门到放弃(十九)RNN和LSTM
  6. mysql中一条SQLupdate语句是如何执行的?redo log 与binlog
  7. 【CodeForces - 1150A】Stock Arbitraging (贪心,水题)
  8. linux-选择输入法
  9. 再见DTC,你好Christmas Day
  10. 帧差法matlab代码_【游戏流体力学基础及Unity代码(一)】热传导方程
  11. mysql 字段加减_MySQL数据库开发常见问题及优化(续)
  12. 利用阿里云提供的镜像快速更换本地的yum源
  13. asp.net中DataList和Repeater的使用
  14. Matlab GUI编程技巧(四):m文件与simulink之间数据传递
  15. Java实现多元t分布函数(Multivariate t distributions)
  16. Android 动画 - TranslateAnimation位移动画
  17. 分子排列不同会导致_高分子物理-中国大学mooc-题库零氪
  18. linux 快速查找文件
  19. 273. 整数转换英文表示
  20. Error: Cannot find module 'chalk'

热门文章

  1. request.getInputStream中文乱码解决方案
  2. 非广告--推荐Dynatrace:树立数字化性能管理DPM标杆
  3. 深入浅出OOP(一): 多态和继承(早期绑定/编译时多态)
  4. 【转】字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
  5. 25GbE可以解决数据中心过载问题吗?
  6. 在 Coding 上搭建 Hexo 个人博客!
  7. 来自内部的XSS攻击的防范
  8. [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
  9. angular学习笔记(九)-css类和样式2
  10. C++ 数值与 string 的相互转换