shell学习之路:shell基础大全2

原文:http://note.youdao.com/share/?id=cd2ad6e6d5db2b347f92958efc2bdbc1&type=note

正则表达式与通配符:

一、介绍:

1.正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式

2.通配符用来匹配符合条件的文件名,通配符是完全匹配,ls、find、cp这些命令不支持正则表达式,所以只能用使用shell自己的通配符来进行匹配了。

二、基础正则表达式:

grep "下列" demo.txt

".*":匹配任意字符任意次

"^$":匹配空行

"a*":匹配a零次或多次,所以可以配所有内容

"^a":匹配以a开头的行

"aa*"匹配两个连续的a的行


元字符
作用

*
前一个字符匹配零次或任意多次
. 匹配除了换行符以外任意一个字符
^ 匹配行首,例如:^hello会匹配hello开头的行。
$
匹配行尾,例如:hello$会匹配以hello结尾的行。
[] 匹配中括号中指定的任意一个字符,只匹配一个字符。
例如:[aoeiu]匹配任意一个元音字母;[0-9]匹配任意一个数字[a-z][0-9]匹配小写字母和一位数字构成的两个字符的字符串
[^] 匹配除中括号的字符以外的任意一个字符,例如:[^0-9]匹配任意一位非数字的字符;[^a-z]表示匹配任意一位非小写字母的字符
\
转移符。用于取消对特殊符号的含义
\{n\}
表示其前面的字符敲好出现n次,例如:[0-9]\{4\}匹配4位数字;[1][3-8][0-9]\{9\}匹配手机号码(第一位必须以1开头第二位必须是3和8之间的第三位以后是1到9中的数字匹配9次)
\{n,m\}
表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8\}匹配小写字母6到8次(位)



字符截取:

cut字段提取命令

介绍: 缺点是无法以空格作为分隔符的应用

[[email protected]]#cut[选项] 文件名

选项:

-f列号:    提取第几列

-d分隔符:    按照指定分隔符冯列

我想提取系统中除root以外的能够登录系统的用户:

[[email protected] demo]# cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
fengtaotao


printf命令(格式化输出命令)

介绍:

[[email protected]]#printf ‘输出类型输出格式‘ 输出内容

输出类型:
    %ns:    输出字符串,n是数字指代输出几个字符

%ni:    输出整数。n是数字指代输出几个数字

%m.nf:    输出浮点数,m和n是数字,指代输出的整数位数和小数位数。如%8.2f表示输出8位数其中有两位小数,6位整数。

输出格式:


\a

输出警告声音
\b 输出退格键,也就是backspace键

\f
清楚屏幕

\n

换行
\r
回车,也就是Enter键
\t
水平输出退格键,也就是Tab键

\v
垂直输出退格键,也就是Tab键

例如:

[[email protected]]# printf "%s\t %s\t %s\t %s\t %s\t %s\n" $(cat student.txt) 这样才能正确的输出格式



awk命令:

介绍:

[[email protected]]#awk ‘条件1{动作1} 条件2{动作2}...‘ 文件名

条件(Pattern)

一般使用关系表达式作为条件

x>10    判断变量x是否大于10

x>=10    大于等于

x<=10    小于等于

动作(Action)

格式化输出

流程控制语句

实例:

[[email protected]]# awk ‘{printf $2 "\t" $6"\n" }‘ student.txt

上述命令是:直接动作 将student.txt的$2第二列 格式\t为tab 与 第6列 +\n换行的输出格式出来

BEGIN条件  

FS内置变量 修改分隔符

END:在所有内容 执行完后在执行一条END中的动作

所有数据 处理完成后会在打印一条aaaaaa数据



sed命令:

介绍:sed是一种几乎包括在所有unix平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。

[[email protected]]#sed [选项]‘[动作]‘文件名

选项:

-n:    一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。(只显示动作内容)

-e:    允许对输入数据应用多条sed命令编辑

-i:    用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出(写入)

动作:


a\
追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用"\"代表数据末完结。

c\
行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用"\"代表数据未完结。

i\
插入,在当前行插入一行或多行。插入多行时,出最后一行外,每行末尾需要用"\"代表数据未完结

d

删除,删除指定行

p
打印print 输出指定的行

s
字符替换,用一个字符串替换另外一个字符串。格式为"行范围s/旧字符串/新字符串/g" (和vim中的替换格式类似)。

示例:1

示例:2

示例3



字符处理命令:

1.排序命令sort

[[email protected]]#sort[选项] 文件名

选项:

-f:    忽略大小写

-n:    以数值型进行排序,默认使用字符串型排序

-r:    反向排序

-t:    指定分隔符,默认是分隔符是制表符

-k n[,m]:    按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

[[email protected]]# sort /etc/passwd    排序用户信息文件

[[email protected]]#sort -r /etc/passwd 倒序以字母倒序



统计命令wc:

[[email protected]~]#wc[选项] 文件名

选项:

-1:    只统计行

-w:    只统计单词

-m:    只统计字符

[[email protected]]#wc /etc/passwod

[[email protected]]#wc -l /etc/passwod

[[email protected]]#wc -lm /etc/passwod



条件判断:

两种判断格式:

[[email protected]~]#test -e /root/install.log

[[email protected]~]#[ -e /root/install.log ]

例如: echo $?来判断上一个命令是否正确执行,正确返回0否则返回对应的数字

例如2:

[[email protected]]# [ -d /root ]&& echo ‘yes‘ || echo "no"

yes

[[email protected]]# [ -f /root/install.log ] && echo ‘yes‘ || echo ‘no‘

yes

如果[]中的判断成立那么输出yes否者输出no 用逻辑与和逻辑或

1.按照文件类型进行判断:

2.按照文件权限进行判断

3.两个文件之间进行比较

例如:

4.两个整数之间比较

5字符串的判断

6;多从条件判断

时间: 2024-10-05 12:13:29

shell学习之路:shell基础大全2的相关文章

shell学习之路:shell基础大全1

http://note.youdao.com/share/?id=a9d02257b639c94323c818bc38423919&type=note 别名命令alias:http://note.youdao.com/share/?id=cbcbd1156ab1f0835c4f76131dbf98e2&type=note 查看当前用户历史命令history:http://note.youdao.com/share/?id=e878f9ed7bb7e8849fa57b67dc1eb7f3&a

Shell学习之路和我发布过的Shell脚本博文

Shell学习之路 目录 Shell学习之路[第一篇]:别名,管道,用户配置文件,变量,read Shell学习之路[第二篇]:条件测试,运算符,选择结构,for循环结构 Shell学习之路[第三篇]:While循环,C-for循环,Until循环,case分支结构,流程控制语句 Shell学习之路[第四篇]:函数,数组,变量替换 Shell学习之路[第五篇]:多线程脚本 Shell学习之路[第六篇]:Trap信号捕捉命令介绍与Shell结合实战讲解 Shell学习之路[第七篇]:Linux下d

Android 学习之路--android基础(三)

Android 学习之路--android基础(三) | Talent?C 盒子 盒子 博客 友链 关于 Posts List 作者Talent?C转载请注明出处 前言 上一篇文章我们介绍了 活动(Activity) 的作用及相关用法,我们知道活动是用来给用户展示 UI界面 的,那么在Android中都有哪些UI控件呢?今天就让我们来简单学习几种常见的 UI控件. 如何编写UI界面? Android Studio中为我们提供两种UI界面的编辑方式, 第一种是通过Android Studio 提供

Linux学习之路-Shell编程

Shell的编程 Bash是用得最广泛的shell,是大多数Linux 系统的缺省 shell.Bourne Again shell (bash), 正如它的名字所暗示的,是Bourne shell 的扩展.bash 与Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性.bash 也包含了很多 C 和 Korn shell 里的优点.bash 有很灵活和强大的编程接口,同时又有很友好的用户界面. 下面具体来介绍bash. Bash语法基本介绍

Linux学习之路-Shell 工作原理

Shell 工作原理 什么是shell shell是命令语言.命令解释程序及程序设计语言的统称,是用户和Linux内核之间的接口程序,为用户提供使用操作系统的接口. shell的特性 shell的一个重要特性是它自身是一个解释型的程序设计语言,程序运行时由解释器全程参与运行过程,每次读取一行,运行一行.shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数.变量.数组和程序控制结构.shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中. sh

Python学习之路-Day1-Python基础

Python学习之路第一天 学习内容: 1.Python简介 2.安装 3.第一个Python程序 4.变量 5.字符编码 6.用户输入 7.表达式if..else语句 8.表达式for语句 9.break和continue 10.while循环 11.字符串格式化 1.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOB

Revit学习之路01_Revit基础

序言: 此分类记录自己的Revit学习之路.初学者难免一叶障目,不见泰山,欢迎一起交流学习! Revit介绍 Revit专为建筑信息模型(BIM)构建的一款建模软件.随着BIM概念在国内的兴起,各大设计院对Revit建模的需求增多,相关的基于Revit的二次开发也逐渐增多.具体介绍不在搬运. Revit是专为BIM构建的软件,了解Revit必须先了解BIM.BIM的概念不仅仅是二维图纸到三维模型的变化,BIM是一个信息管理和交互的平台.Revit既然作为专为BIM构建的软件,那么他就必须能够管理

shell学习之正则表达式【基础篇】

什么是正则表达式: 是你定义的.linux工具用来过滤文本的模式模板.Linux工具(比如sed编辑器或gawk)能够在数据流向工具时对数据进行正则表达式模式匹配.如果数据匹配模式,它就会被接受并进一步处理.如果数据不匹配模式,它就会被过滤掉. |---> 匹配的数据 | 数据流--->正则表达式 ----- |                                    | |---> 不匹配的数据 正则表达式用来在文件中匹配符合条件的字符串,正则包含匹配.Grep.awk.

shell学习之路:流程控制(for)

for循环的语法: 1.  for 变量 in 值1 值2 值3.... do 程序 done 例如:下列脚本会分别打印4次 分别是morning noon afternoon evening的值 1 #!/bin/bash 2 #打印时间 3 #Author Mrfeng 4 5 for time in morning noon afternoon evening 6 do 7 echo $time 8 done 例如批量解压缩: 1 #!/bin/bash 2 #批量解压缩脚本 3 #Aut