Linux鸟哥私房菜基础学习篇
10 Vim程序编辑器
比较常用的命令
- 连续上/下移30行: 30j/30k
- 上一页/下一页:
<C-b>
/<C-f>
- 移上半页/移下半页:
<C-u>
/<C-d>
+
: 移到下行行首10<space>
: 光标往右移10个字符H
: 屏幕最上方第一行的第一个字符M
: 光标移到中央那行的第一个字符L
: 屏幕最下方最后一行的第一个字符G
: 移动到这个文件的最后一行10G
: 移动到文件的第10行gg|1G
: 移动到屏幕首行
10.3 vim的功能
10.3.2 多文件编辑
多窗口下基本命令
- vim 文件1 文件2: 空格分隔同时打开多个文件
:n/:N
: 编辑下/上一个文件:files
: 列出目前这个vim的打开的所有文件sp [filename]
: 若不加filename则再打开多一个本文件,加了则新打开文件ctrl+w+j/下箭头
: 先按ctrl+w
,然后放开按键,然后按j/下箭头,到下一个文件ctrl+w+k/上箭头
: 同上,不过到上一个文件ctrl+w+q
: 也是先按ctrl+w,然后放开其他键按q,关闭下一个文件
12 正则表达式与文本格式化处理
需要注意版本的字符格式是啥,不同的字符格式可能会不一样
拓展正则表达式egrep
可以直接通过|匹配不用的正则
12.1 grep
grep分析的是一行,当一行中有我们想要的东西,就把该行抽取出来
grep [-A] [-B] [-acinv] [--color=auto]
-a: 将binary文件以text文件的方式查找数据
-c: 计算找到`查找字符串`的次数
-i: 忽略大小写
-n: 输出行号
-v: 反向选择,即显示没有`查找字符串`的那一行
--color=auto: 可以将`查找字符串`加上颜色
-A: 后面直接跟数字,表示显示匹配行的后多少行
-B: 后面直接跟数字,表示显示匹配行的前多少行
--color=auto
是一个很爽的东西,但是每次都要输入吗?.在Mac上改一下~/.bash_profile
吧
vim ~/.bash_profile
: 添加alias grep='grep --color=auto'
- 编译:
source ~/.bash_profile
,OK
正则注意点
^
在[]
外表示匹配行首,在[]
内部表示反义- 用
{}
匹配时,因为{与}
shell有语义所以必须\{\}
转义
12.2 sed工具
sed [-nefri] [动作]
-n: 使用安静(silent)模式,在一般sed的用法中,所有STDIN的数据一般都会显示在屏幕上,加上`-n`后只有sed特殊处理的那一行(或者操作)才会被列出来
-e: 直接在命令行模式上进行sed的动作编辑,sed后超过两个动作,需要每个动作前都加`-e`
-f: 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed操作
-r: sed的动作支持的是扩张型正则表达式的语法(默认是基础正则表达式语法)
-i: 直接修改读取的文件内容,而不是屏幕输出
动作说明: [n1[,n2]]function
n1,n2: 一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10~20行之间进行的,则"10,20[动作行为]"
function有下面这些参数
a: 新增,a后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c: 替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行
d: 删除
i: 插入,i后面可以接字符串,而这些字符串会在新的一行出现(当前行的上一行)
p: 打印,也就是将某个选择的数据打印出来,通常p会跟参数sedn -n一起运行
s: 替换,可以直接进行替换工作,通常这个s可以搭配正则表达式
注意点
sed增加两行
nl /etc/passwd | sed '2a Drink tea...\ > drik beer'
- 替换:
sed 's/要被替换的字符串/新的字符串/g'
16.3 printf
printf '打印格式' 实际内容
格式方面的特殊样式
\a
警告声音输出\b
退格键\f
清除屏幕\n
输出新一行\r
即Enter按键\t
水平tab按键\v
垂直的tab按键\XNN
NN代表两位数的数字,可以转换数字成为字符
常见的变量格式
- %ns n是数字,s是string,即多少个字符
- %ni 那个n是数字,i代表integer,多少整数字数
- %N.nf 代表N个整数,n个小数的浮点数
16.4 awk
awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
默认变量
- $0: 代表整行
- $1~$n: 代表第n个字段
- NF: 表示每一行拥有的字段数
- NR: 代表正在处理的第几行
- FS: 目前的分割字符,默认是空格键
注意事项
- 所有awk动作,即在{}内的动作,如果有需要多个命令辅助时,可以用
;
间隔,或者直接以[Enter]
按键来隔开每个命令, - awk的变量无需
$
,直接使用即可 - awk支付
if
- 可用BEGIN和END去掉首尾行
16.5文件比较工具
diff [-bBi] from-file to-file
,以行为单位
from-file to-file
都可用-
代替,代表Standar input
- -b: 忽略一行当中仅有多少个空白的区别
- -B: 忽略空白行的区别
- -i: 忽略大小写
cmp [-s] file1 file2
,以字节为单位
- -s: 把所有的不同点的字节处都列出来,如果不加
-s
仅输出一个不同点
patch [-R] [-pn]
根据补丁,更新/还原
- -R: 还原
- -p: 后面的N表示取消几层目录的意思
制作补丁
diff -Naur 旧文件 新文件 > 补丁.patch
16.6 pr文件打印准备
16.例行性工作
16.1 任务分类
- 仅执行一次的命令: at设置只执行一次的命令(需要atd服务的支持)
- 常规性命令: crontab循环性指令(需要crond服务)
16.2 仅执行一次的工作调度
linux检查有无atd服务: /etc/init.d/atd status
linux开机自启动atd: chkconfig atd on
这里发现at在ubuntu和书籍中很多不符,暂不研究
16.3 循环执行的例行性工作调度
16.3.1 用户的设置
限制用户
- 设置允许的用户: /etc/cron.allow
- 设置不允许的用户: /etc/cron.deny
优先性: cron.allow>cron.deny
命令说明
crontab [-u username] [-l|-e|-r]
-u: 只有root才能执行/帮其他用户新建/删除crontab
-e: 编辑crontab,指定编辑器`EDITOR=vim crontab -e`
-l: 列出所有crontab
-r: 删除所有crontab
命令设置
分钟 小时 日期 月份 周 命令
特别的符号代表
*
: 此字段不做限制,
: 在符合的数字字段都可执行||
-
: 时间范围设置/n
: 每隔n执行