1.文本编辑介绍
Linux文本处理工具:
nano #字符工具,全屏显示
gedit #图形化工具,全屏显示
vi #文本编辑器,centos最小化安装自带
vim #从vi发展来的文本编辑器,有插入模式、命令模式、扩展模式
cat #可查看文本内容
tac #逆向显示文本内容
nl #文本查看,显示行号
rev #将同一行内容逆向显示
hexdump #查看非文本文件内容,显示ASCII,decimal,hexadecimal,octal
od #输出文件八进制和其他格式
xxd #生成hexdump或相反的
more #类似 cat ,以一页一页的形式显示
less #less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页
head #可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容
tail #可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件
cut #显示每行从开头算起 num1 到 num2 的文字
paste #用于合并文件的列
wc #用于计算字数
sort #用于将文本文件内容加以排序
uniq #用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
diff #用于比较文件的差异
patch #用于修补文件
cmp #用于比较两个文件是否有差异
grep #用于查找文件里符合条件的字符串
sed #利用脚本来处理文本文件
awk #一种处理文本文件的语言,是一个强大的文本分析工具
2.正则表达式
正则表达式,regular expressions,由一类特殊字符及文本字符所编写的模式,其中字符表示控制或通配的功能。
-
通配符功能是用来处理文件名
-
正则表达式是处理文本内容中字符
字符匹配:
. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符
[:cntrl:] 不可打印的控制符(退格,删除等)
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数:
* 匹配前面的字符任意次
.* 任意长度的任意字符
? 匹配前面字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,m} 匹配前面的字符至多m次
{n,} 匹配前面的字符至少n次
位置锚定:
^ 行首锚定
$ 行尾锚定
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定
\> 或 \b 词尾锚定
<PATTERN> 匹配整个单词
3.常用编辑工具
-
grep 更适合单纯的查找或匹配文本
-
sed 更适合编辑匹配到的文本
-
awk 更适合格式化文本,对文本进行较复杂格式处理
3.1vim工具应用
vim三种模式:
- 命令模式:command mode
敲键盘动作会被识别为命令,而非输入字符。
如
i 切换到输入模式,以输入字符
x 删除当前光标所在处的字符
dd 删除光标所在整行
:切换到底线命令模式,以在最低一行输入命令
-
输入模式:insert mode
-
底线命令模式:last line mode
一般模式常用按键说明:
#移动光标
ctrl+f 向下移动一页
ctrl+b 向上移动一页
0或Home 移动到行的最前面字符处
$或End 移动到行的最后面字符处
G 移动到最后一行
gg 移动到第一行
n<Enter> n为数字,向下移动n行
#搜索替换
/word 向光标之下搜索word字符串
?word 向光标之上搜索word字符串
n 重复前一个搜索动作
N 反向重复前一个搜索动作
:n1,n2 s/word1/word2/g 在n1到n2行之间查找word1并替换为word2
:1,$ s/word1/word2/g (:% s/word1/word2/g) 从第一行到最后一行搜索word1,并取代为word2
#删除复制黏贴
dd 删除光标所在的一整行
ndd n为数字,删除光标所在向下n行
d1G 删除光标所在到第一行的所有数据
d$ 删除光标到最后一行字符
yy 复制光标所在一行
nyy 复制光标所在向下n行
vim环境变量
:set nu 显示行号
:set nonu 取消行号
3.2grep工具应用
grep, egrep, fgrep - print lines matching a pattern
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
#参数
-a
-b
-c 计算符合样式的列数
-d 当指定要查找的是目录而非文件时,必须使用该参数
-e
-E 将样式作为扩展正则表达式使用
-f 指定规则文件
-i 忽略字符大小写
-n 在显示符合行之前,标识出该行的列数编号
-v 显示不包含匹配文本的所有行
3.2sed工具应用
sed - stream editor for filtering and transforming text
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
#参数说明
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件
-h或--help 显示帮助
-n或--quiet或--silent 仅显示script处理后的结果
-V或--version 显示版本信息
#动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!
实例:
#新增行(追加、插入)
[root@CentOS7 data]# head passwd | sed -e ‘2i mabang‘ #第二行前插入行“mabang”
root:x:0:0:root:/root:/bin/bash
mabang
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS7 data]# head passwd | sed -e ‘2a mabang‘ #第二行后追加行“mabang”
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
mabang
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#删除行
[root@CentOS7 data]# nl passwd | sed -e ‘2,4d‘ #删除第2到4行
1 root:x:0:0:root:/root:/bin/bash
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
#替换行
[root@CentOS7 data]# nl passwd | sed -e ‘2,4c magedu‘ #第2到4行替换为“magedu”
1 root:x:0:0:root:/root:/bin/bash
magedu
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
#数据搜索并显示
[root@CentOS7 data]# nl passwd | sed -n ‘/root/p‘ #匹配搜索并显示行
1 root:x:0:0:root:/root:/bin/bash
10 operator:x:11:0:operator:/root:/sbin/nologin
#数据搜索并删除
[root@CentOS7 data]# nl passwd | sed -e ‘/root/d‘ #删除匹配到的行
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
#数据搜索并执行命令
[root@CentOS7 data]# nl passwd | sed -e ‘/root/{s/bash/csh/;q}‘ #匹配到并执行{}中命令
1 root:x:0:0:root:/root:/bin/csh
#数据搜索并替换
[root@CentOS7 data]# nl passwd | sed -e ‘s/root/MAGE/g‘ #搜索并替换
1 MAGE:x:0:0:MAGE:/MAGE:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
#多点编辑
[root@CentOS7 data]# nl passwd | sed -e ‘s/bash/csh/‘ -e ‘4,$d‘ #替换并删除
1 root:x:0:0:root:/root:/bin/csh
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
#直接修改文件内容(慎重执行)
[root@CentOS7 data]# sed -i ‘$a #hi mage‘ passwd #-i选项修改原文件,末尾追加内容
[root@CentOS7 data]# tail passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
mandriva:x:1005:2019::/home/mandriva:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2019::/home/slackware:/bin/tcsh
user1:x:2003:2003::/home/user1:/bin/bash
user2:x:2004:2004::/home/user2:/bin/bash
user3:x:2005:2005::/home/user3:/bin/bash
#hi mage
3.3awk工具应用
awk - pattern scanning and processing language
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] ‘program‘ file ...
awk脚本
BEGIN{执行前的语句,一般做表头}
{处理匹配的每一行要执行的语句}
END{处理完所有行后要执行的语句,一般做统计结果}
选项参数:
-F 指定输入文件分隔符
-v 复制一个用户定义变量
-f 从脚本文件中读取awk命令
內建变量:
$n #当前记录的第n个字段,字段见有FS分隔
$0 #完整的输入记录
ARGC #命令行参数的数目
ARGIND #命令行中当前文件的位置(从0开始算)
ARGV #包含命令行参数的数组
CONVFMT #数字转换格式
ERRNO #最后一个系统错误的描述
FIELDWIDTHS #字段宽度列表(用空格键分割)
FILENAME #当前文件名
FNR #各文件分别计数的行号
FS #字段分隔符(默认任何空格) Field Separator
IGNORECASE #如果为真,则进行忽略大小写的匹配
NF #一条记录的字段的数目 Number for Field
NR #已经读出的记录数,即行号,从1开始 Number of Record
OFMT #数字的输出格式(默认值为%.6g)
OFS #输出字段分隔符,默认值与输入字段分隔符一致 Out of Field Separator
ORS #输出记录分隔符 Output Record Separate
RLENGTH #由Match函数所匹配的字符串长度
RS #记录分隔符(默认是换行符) Record Separator
RSTART #由Match函数所匹配的字符串的第一个位置
SUBSEP #数组下标分隔符(默认值/034)
实例:
#使用正则,字符串匹配
#忽略大小写
#模式取反