pz之1212

来源:互联网 发布:最火的网络武侠小说 编辑:程序博客网 时间:2024/04/30 08:11

回顾:
cat:dump 将整个文件倾倒到屏幕上,多了,一滚而过
-A
-n
-s

more
less

head
tail
-n
-f 显示之后不退出 查看正在增长阶段的日志信息
ctrl+c 可退出
-------------------------------------------------------------------
grep, 全面搜索正则表达式,并打印之
grep [options] 'pattern' filename

pattern,模式,从文件中匹配整个模式,而后显示包含了匹配到的内容的行
egrep = grep -E
fgrep 不支持元字符
fgrep = grep -F 快速搜索正则表达式
grep root 精确匹配字符串,而非单词
正则表达式
两类:基本的 扩展的(-E)
元字符,
globbing,文件名通配
* r*t, t, rt, rrt, rrrt,rrrrt,

rkfdlsajfdlsafjslat
r.*t rt
r./{1,2/}
.

[^a-z],[A-Z]

锚定符:
^root
root$
^root$
^$

/(../)


root.jfdkafda;root


root.*root

/(root/).*/1

[^.]

^[[:alpha:]]*[^.][0-9]*


如何,精度为2的小数

3.41 abc

/<[0-9]/{1,/}.[0-9]/{2/}/>


255,0,0

([1-9])|([1-9][0-9])|1[0-9][0-9]|2[0-4][0-9]|25[0-4].[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4].[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4].[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]



条件测试:
test express
test 1 > 2
0,非0

短路操作符

0 -a 1
0 -a 0

假 -o 真
假 -o 假
真 -o 假
真 -o 真

假 -a 真

真 -o 假

元字符
. grep 'r..t' /etc/passwd
[] [^abc]root
* 次数匹配,匹配前面字符多少次 a*root, abroot(不匹配), aaroot, aroot, root
.* 任意长度的任意字符
/{n/} a/{2/}root 精确匹配前面的字符两次
/{m,n/} a/{0,2/}root 匹配前面的字符至少m次,至多n次
/{n,/} 至少n次,多则不限

锚定:
^ ^root 锚定行首
$ root$ 锚定行尾
/< /<root arootb rootl croot root 匹配词首
/> root/> , /<root/> 匹配词尾
/< /> 精确匹配单词
/b root/b /broot /broot/b 同/< />
[] 选择括号范围内任意单个字符
[^ ] 取反
/(.../) love your lover /(love/).*/1r like your lover, love your liker /(l[(ik)|(ov)]e/).*/1r
模式引用

-v 反向选取
-i 忽略大小写
-A 显示上下文
-B
-C

--color=auto|noauto
grep --color=auto 'root' /etc/passwd
export GREP_COLOR='01,32' 导出变量 2,绿色 4,蓝色 颜色可定制
grep通常和管道结合使用。
grep --color=auto 'r..t' /etc/passwd
grep --color=auto 'r..t' /etc/passwd > /dev/null 抛弃命令返回值
echo $? 取命令执行结果的返回值,0表示执行成功,
cut 把
-d 指定分隔符
-f 指定选取段
-c2-6 取五个字符
eg.
cut -d: -f1 /etc/passwd |grep "^student/>"

eg.
egrep --color=auto 'r.{2}t' /etc/passwd 不同于grep的/{ /} 。支持()表示字符组
基本与扩展正则表达式的不同
基本的正则表达式支持次数匹配/{/},扩展的正则表达式不支持,支持次数匹配{}
扩展的正则表达式支持(),表示字符组
eg.
'love(able|ly)+' 匹配lovable或lovely匹配ov的一次或多次出现。
lover lover lovover lovovover
l(ov){1,3}er
扩展的正则表达式支持|表示或者, + 匹配1到任意次,?匹配0次或一次

globbing,文件名通配

* 0<=
? 0,1 a?root broot
+ 1<= a+root

| like your lover, love your lover l(ik)|(ov)e your lover

wc
-l
-c
-w
sort,排序,不影响源文件内容

-o /tmp/passwd.sort 指定保存的文件
-r 逆序
-n 以数值来排序
-f 忽略大小写
-u 去掉重复的行

-t : -k 3 指定以哪些段排序,默认是字符串排序

uniq 去除重复的行,应先排序,再去除重复的行
-c 显示每一行所被重复的次数
-u 只显示不重复的行
-d 只显示重复的行
eg.
cut -d: -f7 /etc/passwd |sort |grep -v "^$" |uniq
以:为分隔符,取第七段 ,接着排序 ,grep去掉空白行,uniq去掉重复的行。


条件判断,也叫条件测试:
三种表达方式:
test expression # test 1 -gt 2
[ expression ] # [ l -gt 2 ]
[[ expression ]] # [[ 1 -gt 2 ]]

-a 与
-o 或
! 非
组合条件
[ $B -gt $A -a $B -gt $C ]
[ $B -gt $A -o $B -gt $C ]

短路操作符

&& 必须测试完整的语句
[ $B -gt $A ] && [ $B -gt $C ]

||
[ $B -gt $A ] || [ $B -gt $C ]
eg.
判断student用户是否存在
cut -d: -f1 /etc/passwd |grep "^student$" && echo "Student exsts." || echo "Student is not exists."
cut -d: -f1 /etc/passwd |grep "^stu$" && echo "Stu exsts." || echo "Stu is not exists."

A=3 B=9
判断大小
[ $B -gt $A ] && echo "$B is the max." || echo "$A is the max."


max.sh
#!/bin/bash
#
[ $1 -gt $2 ] && echo "$1 is the max." || "$2 is the max."
在命令行中输入
chmod u+x max.sh #给用户执行权限
./max.sh 7 8 #比较两个数的大小
条件测试:
三类
1,整数测试:
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-eq 等于
-ne 不等于
(($A > $B))
> >=
2,字符串测试:
=
!=
>
<
-z 字符串是否为零
-n 字符串是否为空
3,文件测试:
-e FILE 判断一文件是否存在
-f FILE 是否是文件
-d FILE 是否是目录
-r FILE 是否可读
-w FILE 是否可写
-x FILE 是否可执行
-L/-h FILE:测试一个文件是否符号链接文件
-O FILE: 测试此文件属主是否是你
-G FILE:属组是否是你所属的组
eg.
[ -e /tmp/a ]
echo $?
[ ! -e /tmp/a ]
echo $?
[ ! -e /tmp/dir ] && [ mkdir /tmp/dir ]

diff/patch 生成补丁和打补丁的工具
diff 比较两个文件的不同
cp /etc/vimrc ./
cp /etc/vimrc ./vimrc2
vim rimrc #比较文件内容
diff vimrc vimrc2 #比较文件的不同
diff vimrc vimrc2 > virc.patch #生成补丁文件
patch vimrc < vimrc.patch #打补丁
diff vimrc vimrc2 #此时文件是相同的
patch vimrc2 #将会报错,但仍可补
patch -R vimrc < vimrc.patch #可以降级,即补过之后又不补了。
diff
-u 使用同一格式输出
还可比较目录
diff dir1 dir2
diff dir1 dir2 > dir3/
cd dir1
patch -p1 dir3/
aspell check vimrc #检查vimrc中是否有拼写错误
cat /etc/passwd |tr 'a-z' 'A-Z'
tr 'a-z' 'A-Z' < /etc/passwd
cat /etc/passwd |tr 'abc' ''
---------------------------------------------------
sed 流编辑器
非交互式编辑器
没有波坏性,不修改原文件,除非使用shell的重定向符来保存结果
sed还支持sed脚本
sed是一个行编辑器,它逐行处理要被处理对象文件的内容,并会把结果送至屏幕
模式空间(缓冲区)

文本文件 sed的模式空间(缓冲区) sed的输出
|--------------| |----------------| |---------------——|
|this is a line|---->|this is a line |-----> |this is a line |
|--------------| |----------------| |-----------------|
sed '/root/p' /etc/passwd #搜索包含root字符串的行,并显示。
sed -n '/root/p' /etc/passwd #只显示匹配到的行,不显示模式空间中的行
man sed
d 删除行
s 用一个字符串替换另一个
& 保存查找字符串以便在替换串中引用,引用整个串
sed s/root/ROOT/
add1,add2s///

10,$s/root/ROOT/g #g代表globe 10,$表示替换第十行到最后一行

/root/,/student/s/root/ROOT/ #第一个出现root的行,到出现第一个出现student的行结束

s///
s&&& #分隔符可改变
s&ftp://instructor.example.com/pub&file:///media/cdrom&g
sAftp://instructor.example.com/pubAfile:///media/cdromAg
上面表示将ftp://instructor.example.com/pub替换为file:///media/cdrom

ftp://instructor.example.com/pub, file:///media/cdrom

s/ftp:////instructor.example.com//pub/file://////media//cdrom/g #将/转义

s/r/(../)t/R/1T/ #不支持
s/r/(../)t/R&T/g #引用整个串

s/root/rootable/
s/r..t/&able/
sed -i 用于编辑文件
enabled=0
sed '/baseurl/a /enabled=0' server.repo #在baseurl的行后,添加一行enabled=0
添加多行可添加换行符/n

-i 编辑源文件

-e #同时指定多个应用条件,应用于一个文件



sed [options] 'pattern/operation' FILE

-i:
-e:
-f: #从指定文件中读取条件,并应用于文件
eg.
sed -f sed.txt server.repo
#从文件sed.txt读取条件,并应用于server.repo

addr1,addr2
1,$
/cat/,/pig/
p
d
s/pattern/substitude/ g,i #g表示全局替换,i表示忽略大小写
s@@@

/a #追加
/i #插入,(之前)


ftp://instructor.example.com/pub ~ file:///media/cdrom
--------------------------------------------------------------------------
vi编辑器的使用

nano
emacs, vi #可一次学习到处使用

模式化的编辑器:打开vi,在不同模式,击键动作被解释为不同的意义

命令模式,输入模式,末行模式
模式间转换:
从命令模式到输入模式
命令-->输入:i,a
输入-->命令:Esc

命令-->末行: : (冒号)
末行-->命令: ESC
不确定的情况下,可多敲几次ESC键
vi vi improved, vim

打开方式:
vim是vi的增强版
vim 打开软件本身
vim /root/a.txt

末行模式退出:
:wq 保存退出
:q 退出
:q! 强行退出
:w!
:w /path/to/your/file #另存为。。。

命令:
ZZ,保存退出
ctrl+z 挂起退出
shift+z 真正的退出

vim +n 在第n行上,打开一个文件时
vim +/pattern 打开文件时,在第一个匹配都的字符串所在的行。


光标移动:
h,j,k,l 依次对应左,下,上,右 。一次移动一个字符

行内移动(单词跳转):
^,0,$
^:非空白行首
0:行首,包括空白,若有的话
$:绝对行尾,包括空白,若有的话
单词为单位:
w:下一个单词词首
b:上一个单词词首,若光标在单词的词首;当光标不在单词的词首,跳转到当前单词的词首
e:跳到词尾,光标在单词词尾时,跳转到下一个单词词尾;否则,跳转到当前单词的词尾

行间:
nG, 1G 跳转到第n行的行首
G 跳转到最后一行的行首
末行模式下,实现在行间跳转:
:n 跳转到第n行

句:)( 在语句间跳转
段落:}{ 在段间跳转
以上都支持与数字结合使用,0,^,$除外
eg.
w,6w 跳转到第六个单词词首

命令-->输入:
i:insert,当前光标所在处插入
I: 在当前光标所在行行首
a: append,当前光标所在处的后面
A: 当前光标所在行的行尾
o: 当前光标所在行的下方另起新行
O 当前光标所在行的上方另起新行

c 修改,先删除一些东西,再转换到插入状态
3cw 删除三个单词,插入
C 删除当前光标所在行,并转入插入状态

替换:
r 实现单字替换,无需转换模式
R 替换模式,或覆盖模式

删除操作:
x 删除当前光标所在处的字符,字符后的
X 删除当前光标所在处的字符,字符前的
d 需结合使用,与其它
D 清空,留下空白
dd 删除一行
ndd
dw 会删除下一个单词前的空格
de

复制内容:
y 若复制的是整个行,另起新行;若是一部分,贴在当前光标所在处的行尾
yy 复制一行
y$ 复制当前行到最后一行
nyy
p
P 大写的P 贴在当前光标所在处的上面

移动:先删再移动
d
dd 只能贴最近一次操作
.,+100d 从当前行往下走一百行,删除
.,$-1d 删除当前行到倒数第二行
%d 删除全文


可视模式:
v, 敲v键之后,光标经过的地方将被选中,敲y键,按字符选取
V 以行为单位,对角线的矩形块被选中

查询:
/pattern 向下搜索匹配条件的字符串
/$[[:upper:]]/{1,/} 匹配$开头,后面跟至少一个大写字母的
?pattern 向下搜索匹配条件的字符串

n,N

查找并替换:
:addr1,addr2s///gi
%s/red/RED/gi
1,$/red/RED/gi

撤消操作:
u(undo),默认是五十次,默认撤销最近的一次操作
U 撤销最近一次的所有操作
Ctrl+r 撤销的撤销

重做,
redo, 不重做撤销
.

eg.
将中间出现#号的,#号后面的内容给删除
s/^/(/([[:space:]]/)*[^[:space:]]/{1,/}/2/)#.*//1/g

vim a b c d 一次打开a,b,c,d多个文件
窗口间切换:
:next 下一个窗口
:prev
:first 第一个窗口
:last

一次打开多个窗口
vim
-o 水平分割窗口 ctrl+ww,切换到下一个窗口,ww是连续按两次w,末行模式close 退出窗口
-O 垂直分割窗口

末行模式输入
vsplit 也可分割窗口,垂直 close退出

如何定制vim显示特征:
set 来设置

set nu
set nonu 关闭..
number:行号
set ai
set noai
autoindent:自动缩进
ignorecase: 忽略大小写
set ic
showmatch: 显示匹配的括号

在自己的家目录下建一文件,可保留设置
vim .vimrc
教程 vimtutor
----------------------------------------------------------
shell算术运算:
三种方式:
$((expression))
$[expression]
let

+,-,/*,/,%,++,--,+=

A=2
B=3
let A=$A+$B
let A+=$B
选择分支 循环分支
面向对象:顺序 选择 循环

选择分枝,三类:
单分支的if语句
if [];then
..
..
..
fi
双分支的if语句
if [];then
..
..
else
..
..
fi

多分枝的if语句
if [] ;then
..
..
elif []; then
..
elif []; then
..
else
..
fi

嵌套 可实现 分支的混合使用



循环分枝
三种循环
while,
for
until

for VAR in list; do
..
..
..
done

let SUM=0
for I in 1 2 3 4 5 6 7 8 9 10; do
let SUM+=$I
done
echo $SUM

{1..100} = $(seq 1 100)

while []; do
...
done

let I=1
let SUM=0
while [ $I -le 100 ]; do
let SUM+=$I
let I++
done

while read LINE; do #read 可与用户交互
...
done < /etc/issue

cat /etc/issue | while read LINE; do
...
done


1 100
until [];do #不满足就循环
...
done
--------------------------------------------------------------------------------------