Shell编程

来源:互联网 发布:mac系统剪切文件 编辑:程序博客网 时间:2024/05/16 02:43

Shell编程

正则表达式

字符截取命令

字符处理命令

条件判断

流程控制

一、正则表达式

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

grep  “size”  anno...    

会出现完整的一行

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

*,?,[]

2、基础正则表达式

* 前一个字符匹配0次或任意多次

匹配除了换行符外任意一个字符

^ 匹配行首。

$匹配行尾

[]匹配一个字符

[^]匹配除了括号的字符外的任意一个字符。[^0-9]匹配任意一位非数字字符

\ 转义符,用于取消特殊符号的含义取消

\{n\}  表示其前面的字符恰好出现n次。[0-9]\{4\}匹配4位数字,

\{n,\} 表示其前面的字符出现不小于n次,例如[0-9]\{2,\}

\{n,m\}表示其前面的字符至少出现n次,最多出现m次。


*  grep  “a*”  test.txt

输出所有的内容,包括空白行

*  grep  “aa*”  test.txt

匹配至少1个a

.  grep “s..d ”   text.txt

匹配在s和d这两个字母之间一定有两个字符的单词

.  grep “s.*d ”   text.txt

匹配在s和d字母之间有任意字符

.  grep “.* ”   text.txt

匹配所有

^  grep "^M" test.txt

匹配以大写字母M开头的行

grep “n$”   text.txt

匹配以n结尾的行

grep-n'^$”   text.txt

匹配空白行

[]  grep-n's[ao]id”   text.txt

匹配said 或者soid

[^]  匹配取反

^[^a-z]

\  grep  '\.$'  test.txt

以.结尾的

\{n\}   grep  "a\{3\}" test.txt

\{n,m\}  grep “sa\{1,3\}i”  test.txt

匹配在字母s和字母i之间有最少一个a  最多三个a

字符截取命令

cut命令

printf命令

awk命令

sed命令

cut  选项  文件名

-f  提取第几列

-d 分隔符  按照指定分隔符分割列

TAB键

cut  -f   2  tset.txt

cut  -d  ":'  -f  1,3   /etc/passwd

cat  /etc/passed  丨 grep  /bin/bash 丨 grep  -v  root  #取反  丨 cut -d ":" -f  1

删除普通用户

df  -h 查看文件系统  丨 grep “sda5”  丨 cut -f  5  #不能识别空格

printf命令

格式化打印命令

printf  '输出类型,输出格式'  输出内容

printf '%s'  $(cat a.txt)


输出类型

%ns 输出字符串 

%ni 输出整数

%m.nf 输出浮点数,m数字总数,n小数位数

输出格式

\a发出警告 \t 水平输出退格键tab

\b输出退格键 \r 回车

\n换行 \v

awk命令输出中支持print和printf。

print自动添加换行符,系统没有

printf手动添加换行符

awk

先读入第一行

截取符合条件的列

awk  ‘条件1{动作1}条件2 {动作2}条件3{动作3}’  文件名

动作

格式化输出

流程控制语言

awk  ‘{printf $2 "\t" $6}’student.txt

BEGIN#之前执行一次

awk 'BEGIN {printf "This is a transcript \n"}

{printf $2 "\t"  $6  "\n"}'   student.txt


FS内置变量

cat  /etc/passwd 丨grep  "/bin/bash"  丨 \awd  'BEGIN  {FS=":"  }{printf $1 "\t" $3 "\n"}'


END

cat  /etc/passwd 丨grep  "/bin/bash"  丨 \awd  'BEGIN  {FS=":"  }END {printf "aaaaaaaa"}{printf $1 "\t" $3 "\n"}'


关系运算符

awk ‘$6 >=87  {printf  $2  "\n"}’



sed命令

流编辑器

将数据进行选取、替换、删除、新增

vi  修改文件,不可把命令的结果写到文件中

sed  选项  ‘动作’  文件名

-n  一般sed命令会把所有的数据都输出到屏幕上。只输出sed处理的

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

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


a\ : 追加 c\:行替换  i\:插入   d:删除   p:打印   s:字串替换


sed -n  ‘2p’   std.txt

输出第二行     #行操作

df  -h  丨 sed  -n  ‘2p’

sed  ‘2,4d’  stf.txt

#删除行 ,不会影响文件本身


sed ‘2a  hello ’   std.txt

追加

sed ‘2i  hello  world’  std.txt

插入

都没有修改文件本身


sed  ‘4c no person’ std.txt

替换行

sed ‘s /’





0 0