文本编辑和处理命令-目录
- 一、系统基本编辑命令
- 安装vim软件工具包
- 语法格式:
- 1、vim编辑命令模式
- 01 普通模式
- 02 编辑模式
- 03 命令模式
- 2、编辑文件技巧
- 01 批量删除多行指定信息
- 02 批量增加多列指定信息
- 03 编辑常见问题
- 错误1:没有指定编辑信息
- 错误2:路径信息不存在
- 错误3:编辑出现异常中断
- vi异常问题处理方式:
- 二、文件编辑命令
- 1、echo
- 语法格式:
- 常用参数:
- 实操
- 01 -n参数不换行
- 02 打印输出使用转义符号
- 03 输出信息写到指定文件中
- 2、cat
- 语法格式:
- 常用参数:
- 实操
- 01 实现多行信息内容的编辑操作
- 02 实现联合多个文件信息并重定向指定文件中
- 三、文件查看命令
- 1、more
- 语法格式:
- 常用参数:
- 实操
- 01 只查看指定几行信息
- 02 只查看指定行之后的内容信息
- 2、less
- 语法格式:
- 常用参数:
- 3、head
- 语法格式:
- 常用参数:
- 实操:
- 01 显示文件前几行
- 4、tail
- 语法格式:
- 常用参数:
- 实操:
- 01 显示文件指定最后几行的信息
- 02 从第几行开始显示文件内容
- 03 tail命令实时监控文件的变化
- 四、文本数据处理命令
- 1、grep
- 语法格式:
- 选项参数:
- 实操:
- 01 grep过滤不包含qqq字符串的行(-v参数实践)
- 02 grep显示过滤后的内容的行号(-n参数实践)
- 03 grep不区分大小写进行过滤(-i参数实践)
- 04 grep计算匹配的字符串的数量(-c参数实践)
- 05 grep只输出匹配的内容(-o参数实践)
- 06 grep搜索符合要求的用户(-w参数实践)
- 2、tr
- 语法格式:
- 选项参数:
- 实操:
- 01 将文件中的‘abc'替换成’zhang'
- 02 将文件中出现的‘qqq'过滤掉,不做输出显示。
上篇: Linux-初学者系列——篇幅6_系统基础操作管理
一、系统基本编辑命令
vi\vim,vim是vi命令的增强版,例如:首行缩进、高亮显示代码等。
默认centos7系统可能会没有vim命令,需要用命令安装下
安装vim软件工具包
yum install -y vim
语法格式:
vim [option] [file]
vim 选项 文件
1、vim编辑命令模式
vim有三种模式:普通模式、编辑模式、命令模式。
01 普通模式
vim命令打开一个文件后,默认状态时普通模式。
这个模式中,不能编辑输入操作,可以移动光标,可以执行下操作命令进行删除、复制、粘贴等。
02 编辑模式
‘i l o O a A r R s S’等字母进入编辑模式才可以执行编辑操作。
03 命令模式
在普通模式,输入‘:’或者‘/’ 或者‘?’,光标会自动定位到最低行。
命令模式中,可以执行保存、退出、搜索、行号等相关操作。
此处内容看第一篇文章
2、编辑文件技巧
01 批量删除多行指定信息
- 进入批量编辑模式ctrl+v可视块
- 批量删除操作d或者x
02 批量增加多列指定信息
- 进入批量编辑模式ctrl+v可视块
- 选择批量编辑区域 利用方向键
- 进入插入编辑模式 大小字母 I 或者shift + i
- 开始编辑内容信息
- 退出批量编辑操作esc
03 编辑常见问题
错误1:没有指定编辑信息
[root@bogon ~]# vim
错误2:路径信息不存在
[root@bogon ~]# vim zhang/zhang/zhang.txt
该错误表示编辑文件对应路径信息不存在
错误3:编辑出现异常中断
当前文件异常时因为文件没有保存退出或者虚拟机断开提示。
恢复R
vi异常问题处理方式:
恢复临时文件:vi -r 需要编辑的文件
显示临时文件: vi -r/-L
取消生成临时文件:vi -n 需要编辑的文件
二、文件编辑命令
1、echo
echo命令可以将文本显示到Linux命令行上,或者重定向符号放入到指定的文件中。
语法格式:
echo [选项] [文本]
常用参数:
序号 | 参数选项 | 说明 |
---|---|---|
1 | -n | 不要自动换行 |
2 | -E | 不解析转义字符(默认参数) |
3 | -e | 如果字符串中出现下面字符,需要进行特别处理,不能将它当作一般文字输出。 \a:发出警告 \b:删除前一个字符 \c:最后不加上换行字符 \f:换行但光标依旧停留到原来的位置 \n:换行且光标移动到行首 \r:光标移动到行首,但是不换行 \t:插入tab |
实操
01 -n参数不换行
[root@bogon ~]# echo 'zhang01'; echo 'zhang02'
zhang01
zhang02
[root@bogon ~]# echo -n 'zhang01'; echo 'zhang02'
zhang01zhang02
[root@bogon ~]#
02 打印输出使用转义符号
\n
[root@bogon ~]# echo 'zhang01\nzhang02'
zhang01\nzhang02
[root@bogon ~]# echo -e 'zhang01\nzhang02'
zhang01
zhang02
\r
[root@bogon ~]# echo -e 'zhang01\rzhang02'
zhang02
\t 制表符
[root@bogon ~]# echo -e '01\tzhang\tlinux\n02\tzhang\tlinux'
01 zhang linux
02 zhang linux
03 输出信息写到指定文件中
>/>>表示重定向,可以在命令执行后输出到屏幕的信息存到指定文件夹中
> 覆盖
[root@bogon ~]# cat zhang.txt
文件里内容忽略...
[root@bogon ~]# echo huanghun > zhang.txt
[root@bogon ~]# cat zhang.txt
huanghun
>> 追加
[root@bogon ~]# cat zhang.txt
huanghun
[root@bogon ~]# echo huanghun >> zhang.txt
[root@bogon ~]# cat zhang.txt
huanghun
huanghun
2、cat
cat命令显示单个文件内容,或者将几个文件内容连接起来显示。
还可以从标准输入中读取内容并显示,生产环境中,它与重定向或者追加符号配合使用。
语法格式:
cat [选项] [文件]
常用参数:
序号 | 参数选项 | 说明 |
---|---|---|
1 | -n | 从第一行开始对所有输出的内容按行编号 |
2 | -b | 与-n功能类似,但是忽略显示空白行行号 |
3 | -s | 当遇到有连续两行以上的空白行,就替换成一行空白行 |
4 | -E | 在每一行的行尾显示$符号 |
实操
01 实现多行信息内容的编辑操作
[root@bogon ~]# cat > zhang.txt <<EOF
> zhang01
> zhang02
> zhang03
> zhang04
> EOF
[root@bogon ~]# cat zhang.txt
zhang01
zhang02
zhang03
zhang04
[root@bogon ~]#
cat > zhang.txt 表示打开zhang.txt文件
zhang.txt <<EOF…EOF 表示向打开的文件输入信息
02 实现联合多个文件信息并重定向指定文件中
[root@bogon ~]# cat zhang.txt
zhang01
zhang02
zhang03
zhang04
[root@bogon ~]# cat /dev/null > zhang.txt
[root@bogon ~]# cat zhang.txt
[root@bogon ~]#
序号 | cat命令常用功能 | 说明 |
---|---|---|
1 | 查看文件内容 | 例: cat zhang.txt |
2 | 多个文件合并成一个 | 例:cat zhang01.txt zhang02.txt > newzhang.txt |
3 | 非交互式编辑或追加内容到文件尾部 | cat >> zhang.txt <<EOF file EOF |
4 | 清空文件内容 | 使用cat /dev/null > zhang.txt 上述命令可以将文件内容清空,但是文件还是存在的。 |
三、文件查看命令
1、more
more命令类似cat,cat命令是将整个文件的内容一次性显示到屏幕上。
而more会一页一页显示文件内容。
语法格式:
more [选项] [文件]
常用参数:
序号 | 参数/特殊功能 | 说明 |
---|---|---|
1 | -num | 指定屏幕显示大小为num行 |
2 | +num | 从行号num开始显示 |
3 | Enter | 向下显示1行 |
4 | 空格键 | 向下滚动一屏 |
5 | b | 返回上一屏 |
6 | = | 输出当前行的行号 |
7 | /查找的文本 | 查找指定文本 |
8 | v | 调用vi编辑器 |
9 | q | 退出more查看状态 |
实操
01 只查看指定几行信息
[root@bogon ~]# more -3 /etc/services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
--More--(0%)
02 只查看指定行之后的内容信息
[root@bogon ~]# more +333 -3 /etc/services
ica 1494/tcp # Citrix ICA Client
ica 1494/udp # Citrix ICA Client
wins 1512/tcp # Microsoft's Windows Internet Name
--More--(2%)
2、less
less命令类似于more命令,可以分页显示文件内容,比more功能强大。
less命令在读取文件内容的时候,不需要一次性将整个文件加载后显示,而是会根据需要来加载文件内容。
并且less命令支持[page up] [page down]等按键功能,便于查看文件内容。
语法格式:
less [选项] [文件]
常用参数:
序号 | 参数选项 | 说明 |
---|---|---|
1 | -i | 搜索时忽略大小写 |
2 | -m | 显示类似于more命令的进度百分比 |
3 | -N | 显示每行的行号 |
4 | -s | 将连续空行压缩为一行显示 |
5 | -e | 当文件显示到结尾时自动退出文件,若不使用此选项则需要使用交互命令q退出less |
交互操作:
再交互模式下,less命令也是基于more命令和vi命令的。
序号 | 子命令 | 说明 |
---|---|---|
1 | b | 向前翻一页 |
2 | 空格键 | 向后翻一页 |
3 | ↑ | 向上滚动一行 |
4 | ↓/回车键 | 向下滚一行 |
5 | /字符串 | 向下搜索字符串 |
6 | ?字符串 | 向上搜索字符串 |
7 | n | 向后查找下一个匹配的文本 |
8 | N | 向前查找前一个匹配的文本 |
9 | v | 进入vi编辑界面 |
10 | G | 移动到最后一行 |
11 | g | 移动到第一行 |
12 | h | 显示帮助界面 |
13 | q | 退出less命令 |
3、head
head命令用于显示文件头部的内容,执行head命令默认会输出文件的开头10行内容。
语法格式:
head [选项] [文件]
常用参数:
序号 | 参数选项 | 说明 |
---|---|---|
1 | -n<行数> | 制定显示的行数 |
2 | -c<字节数> | 指定显示的字节数 |
3 | -q | 不显示包含给定文件名的文件头 |
4 | -v | 总是显示包含给定文件名的文件头 |
实操:
01 显示文件前几行
[root@bogon ~]# head -n 2 /etc/services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
[root@bogon ~]#
4、tail
语法格式:
tail [选项] [文件]
常用参数:
序号 | 参数选项 | 说明 |
---|---|---|
1 | -n<行数> | 指定显示的字节数 |
2 | -c<数目> | 指定显示的行数 |
3 | -f | 实时输出文件变化后的追加的数据 |
4 | -F | 功能等同于-f --retry |
5 | –retry | 不停尝试打开文件直到打开为止,与-f参数合用 |
6 | –pid=进程号 | 与-f参数连用,在进程结束后自动退出tail命令 |
7 | -s秒数N | 监视文件变化的间隔秒数 |
8 | -q | 不显示包含给定文件名的文件头 |
9 | -v | 总是显示包含给定文件名的文件头 |
实操:
01 显示文件指定最后几行的信息
[root@bogon ~]# tail -2 zhang.txt
2
abc
[root@bogon ~]# tail -n 2 zhang.txt
2
abc
[root@bogon ~]#
02 从第几行开始显示文件内容
[root@bogon ~]# cat zhang.txt
qqqqsss1111111
qqqqsss1111111
省略中间内容...
1
2
abc
[root@bogon ~]#
[root@bogon ~]# tail -n +20 zhang.txt
5
6
省略中间内容...
1
2
abc
[root@bogon ~]#
03 tail命令实时监控文件的变化
主要用于日志文件信息,便于排查系统或程序的问题。
[root@bogon ~]# ll /var/log/messages
-rw-------. 1 root root 870936 4月 21 11:10 /var/log/messages
[root@bogon ~]#
[root@bogon ~]# cat /var/log/messages
省略中间内容...
[root@bogon ~]#
[root@bogon ~]# tail -5 /var/log/messages
Apr 21 11:00:01 bogon systemd: Starting Session 16 of user root.
Apr 21 11:01:01 bogon systemd: Started Session 17 of user root.
Apr 21 11:01:01 bogon systemd: Starting Session 17 of user root.
Apr 21 11:10:01 bogon systemd: Started Session 18 of user root.
Apr 21 11:10:01 bogon systemd: Starting Session 18 of user root.
[root@bogon ~]#
[root@bogon ~]# tail -f /var/log/messages
Apr 21 10:52:24 bogon gnome-software-service.desktop: 02:52:24:0178 Gs no app for changed launch-new-instance@gnome-shell-extensions.gcampax.github.com
Apr 21 10:52:24 bogon gnome-software-service.desktop: 02:52:24:0178 Gs no app for changed alternate-tab@gnome-shell-extensions.gcampax.github.com
Apr 21 10:52:24 bogon gnome-software-service.desktop: 02:52:24:0183 Gs no app for changed places-menu@gnome-shell-extensions.gcampax.github.com
Apr 21 10:52:24 bogon gnome-software-service.desktop: 02:52:24:0191 Gs no app for changed apps-menu@gnome-shell-extensions.gcampax.github.com
Apr 21 11:00:01 bogon systemd: Started Session 16 of user root.
Apr 21 11:00:01 bogon systemd: Starting Session 16 of user root.
Apr 21 11:01:01 bogon systemd: Started Session 17 of user root.
Apr 21 11:01:01 bogon systemd: Starting Session 17 of user root.
Apr 21 11:10:01 bogon systemd: Started Session 18 of user root.
Apr 21 11:10:01 bogon systemd: Starting Session 18 of user root.
// 重启服务
[root@bogon ~]# systemctl restart NetworkManager
[root@bogon ~]# tail -f /var/log/messages
Apr 21 11:14:55 bogon dnsmasq[1586]: using nameserver 114.114.114.114#53
Apr 21 11:14:55 bogon dnsmasq[1586]: using nameserver 8.8.8.8#53
Apr 21 11:14:55 bogon nm-dispatcher: req:3 'up' [ens33]: new request (4 scripts)
Apr 21 11:14:56 bogon systemd: Started Network Manager Wait Online.
Apr 21 11:14:56 bogon NetworkManager[5893]: <info> [1682046896.0008] manager: NetworkManager state is now CONNECTED_GLOBAL
Apr 21 11:14:56 bogon nm-dispatcher: req:4 'connectivity-change': new request (4 scripts)
Apr 21 11:14:56 bogon systemd: Unit iscsi.service cannot be reloaded because it is inactive.
Apr 21 11:14:56 bogon nm-dispatcher: req:3 'up' [ens33]: start running ordered scripts...
Apr 21 11:14:56 bogon systemd: Unit iscsi.service cannot be reloaded because it is inactive.
Apr 21 11:14:56 bogon nm-dispatcher: req:4 'connectivity-change': start running ordered scripts...
四、文本数据处理命令
1、grep
grep是从文本文件或管道数据流中筛选匹配的行及数据,如配合正则表达式一块使用功能会更强大。
语法格式:
grep 选项 匹配模式 文件
匹配模式:是要获取的内容,可以是普通的文字符号也可以是正则表达式。
选项参数:
序号 | 选项参数 | 说明 |
---|---|---|
1 | -v | 显示不匹配的行,或者也就是排除某些行,显示其他行信息 |
2 | -n | 显示匹配的行及行号 |
3 | -i | 不区分大小写,默认是区分大小写 |
4 | -c | 只统计匹配的行数,注意不是匹配的次数 |
5 | -w | 以单词为单位进行过滤 |
6 | -o | 只输出匹配的内容 |
实操:
01 grep过滤不包含qqq字符串的行(-v参数实践)
[root@bogon ~]# cat grep zhang.txt
qqqqsss1111111
qqqqsss1111111
省略中间内容...
1
2
abc
[root@bogon ~]# grep -v 'qqq' zhang.txt
2222222
3333333
4
省略中间内容...
1
2
abc
02 grep显示过滤后的内容的行号(-n参数实践)
[root@bogon ~]# grep -n 'qqq' zhang.txt
1:qqqqsss1111111
2:qqqqsss1111111
省略中间内容...
15:qqqqsss1111111
16:qqqqsss1111111
[root@bogon ~]#
03 grep不区分大小写进行过滤(-i参数实践)
[root@bogon ~]# cat grep_zhang.txt
zhang
linux
zhang01
zhang02
H5
[root@bogon ~]# grep -i 'zhang' grep_zhang.txt
zhang
zhang01
zhang02
04 grep计算匹配的字符串的数量(-c参数实践)
[root@bogon ~]# cat grep_zhang.txt
zhang
linux
zhang01
zhang02
H5
[root@bogon ~]# grep -c 'zhang' grep_zhang.txt
3
05 grep只输出匹配的内容(-o参数实践)
[root@bogon ~]# grep -o 'zhang' grep_zhang.txt
zhang
zhang
zhang
[root@bogon ~]#
06 grep搜索符合要求的用户(-w参数实践)
[root@bogon ~]# cat grep_zhang.txt
zhang
linux
zhang01
zhang02
H5
[root@bogon ~]# grep -w 'zhang' grep_zhang.txt
zhang
2、tr
tr命令可以读取数据信息进行替换,缩减或者删除字符,并将结果显示出来。
语法格式:
tr 选项 字符1 字符2
选项参数:
序号 | 选项参数 | 说明 |
---|---|---|
1 | -d | 删除字符 ※ |
2 | -s | 保留连续字符发第一个字符,删除其他字符 |
3 | -c | 使用第一个字符串的补集,取反 |
实操:
01 将文件中的‘abc’替换成’zhang’
[root@bogon ~]# cat tr_test.txt
I am zhang
linux
H5
ui
[root@bogon ~]# tr 'zhang' '12345' tr_test.txt
tr: 额外的操作数 "tr_test.txt"
Try 'tr --help' for more information.
[root@bogon ~]# tr 'zhang' '12345' < tr_test.txt
I 3m 12345
li4ux
H5
ui
[root@bogon ~]#
tr命令读取文件内容需要用到标准输入重定向符号<,并且tr替换信息是按照字符1对1进行替换的。
02 将文件中出现的‘qqq’过滤掉,不做输出显示。
[root@bogon ~]# tr -d 'linux' < tr_test.txt
I am zhag
H5
在特定场景下,利用tr命令可以对指定字符进行有针对的操作处理。