作为以gedit为主要工具的使用者,面对40g的日志文件确实难于下手,不得不使用sed截取了内容,顺便整理了linux上文本工具的使用。未全部验证,不排除有错误。
vi
在Linux系统中,vi是一种非常流行的文本编辑器,它以其高效的键盘快捷键和强大的文本处理功能而受到用户的喜爱。就算是图形化为主的使用者,也必然需要掌握基本使用。
vi编辑器的模式
vi编辑器有三种模式,分别是命令模式(Command Mode)、插入模式(Insert Mode)和底行模式(Last Line Mode)。
命令模式:
在此模式下,用户可以使用键盘快捷键来移动光标、删除字符、复制和粘贴文本等。
默认情况下,vi编辑器处于命令模式。
插入模式:
在此模式下,用户可以输入文本。
要进入插入模式,用户需要在命令模式下按“i”(在当前光标位置前插入文本)、“a”(在当前光标位置后插入文本)、“o”(在当前行的下面新建一行并进入插入模式)等快捷键。
底行模式:
在此模式下,用户可以执行保存文件、退出vi编辑器、设置vi环境、查找和替换文本等操作。
要进入底行模式,用户需要在命令模式下按“:”键。
vi编辑器的基本操作
打开文件:
在终端中输入“vi 文件名”命令,然后按Enter键,即可打开指定的文件。
例如,要打开名为“test.txt”的文件,可以输入“vi test.txt”。
移动光标:
使用h(左)、j(下)、k(上)、l(右)键进行光标移动。
使用Ctrl+f(向下翻页)、Ctrl+b(向上翻页)进行页面切换。
0键(数字零)移动到行首,$键移动到行尾。
插入文本:
按i键在当前光标位置前插入文本。
按a键在当前光标位置后插入文本。
按o键在当前行的下面新建一行并进入插入模式。
按A键在当前行的末尾位置添加文本。
按I键在当前行的开始处添加文本(非空字符的行首)。
按O键在当前行的上面新建一行。
删除文本:
按x键删除当前光标所在位置的字符。
按dd键删除当前行。
按ndd键向下删除当前行在内的n行。
dw删除从光标位置到一个单词的末尾,d$删除从光标位置到行尾,d0删除从光标位置到行首。
复制和粘贴:
按yy键复制当前行。
按nyy键复制当前行向下的n行。
按p键将复制的文本粘贴到光标下方。
按P键将复制的文本粘贴到光标上方。
yw复制从光标开始到词尾的字符,nyw复制从光标开始的n个单词。
y^复制从光标到行首的内容,y$复制从光标到行尾的内容。
撤销和重做:
按u键撤销上一步操作。
按U键撤销对当前行的所有操作(注意与u的区别)。
按Ctrl+r键重做上一次被撤销的命令。
查找和替换:
在命令模式下按“/”键,然后输入要查找的文本,按Enter键即可开始查找。
按n键跳转到下一个匹配的文本。
按N键跳转到上一个匹配的文本。
在底行模式下,可以使用“:s/old/new/”命令替换当前行中首次出现的old为new。
使用“:s/old/new/g”命令替换当前行中所有的old为new。
使用“:n,ms/old/new/g”命令替换从n到m行里所有的old为new。
使用“:%s/old/new/g”命令替换当前文件里所有的old为new。
设置行号:
在底行模式下,使用“:set nu”命令显示行号。
使用“:set nonu”命令取消显示行号。
保存和退出:
在底行模式下,使用“:w”命令保存文件。
使用“:q”命令退出编辑器。
如果文件已修改且不想保存,可以使用“:q!”命令强制退出。
使用“:wq”命令保存文件并退出编辑器。
注意事项
请务必注意大小写,因为vi编辑器对大小写敏感。
如果不确定自己处于哪种模式,可以按两次Esc键以确保返回到命令模式。
vim
vim和vi使用基本一致,也有些许差别,一般直接套用vi命令即可。
Vim功能更强大:Vim是Vi的增强版,支持更多的编辑功能和插件。Vim提供了语法高亮显示、多窗口编辑、宏录制等高级功能,而Vi则是一个基本的文本编辑器,功能相对较为简单。
多级撤销:在Vi中,按“u”键只能撤销上次命令,但在Vim中,可以无限制地撤销之前的操作。
gedit
gedit是linux桌面环境下的最主要文本编辑器,主要用于轻度编辑和记录内容。一般默认安装。桌面环境打开后其实也可以有更多的选择,例如vscode等.
启动Gedit
通过图形界面启动:
在GNOME桌面环境中,可以通过应用程序菜单找到Gedit并启动。
也可以双击要编辑的文件,然后在弹出的打开方式中选择Gedit。
通过命令行启动:
打开终端,输入“gedit”命令并回车,即可启动Gedit。
如果要打开特定文件,可以在“gedit”命令后加上文件路径和名称,如“gedit /path/to/file.txt”。
如果编辑的文件需要管理员权限,在账号权限足够的其概况下可以提权操作,如“sudo gedit /path/to/file.txt”。
基本编辑操作
打开文件:
在Gedit窗口中,点击菜单栏的“文件”选项,然后选择“打开”。
在弹出的打开对话框中,选择要打开的文件并点击“打开”按钮。
新建文件:
点击菜单栏的“文件”选项,然后选择“新建文档”或“新建标签页”。
也可以直接在命令行中输入“gedit newfile.txt”来创建一个新文件(如果文件不存在,Gedit会自动创建)。
保存文件:
编辑完文件后,点击菜单栏的“文件”选项,然后选择“保存”或“另存为”。
也可以使用快捷键Ctrl+S来保存当前文件,Ctrl+Shift+S来另存为其他文件。
复制、剪切和粘贴:
使用快捷键Ctrl+C复制选定文本,Ctrl+X剪切选定文本,Ctrl+V粘贴文本。
也可以通过菜单栏的“编辑”选项来进行这些操作。
撤销和重做:
使用快捷键Ctrl+Z撤销最近的编辑操作,Ctrl+Y重做撤销的操作。
sed
对于过大文件,显然图形环境压力巨大,常见的日志文件可能几十g。假设日志文件开始都有时间2024-12-09 10:11:11 这样的,则可以进行裁减.
例如,将文件nohup.out中截取2024年12月9日10点到12点的内容到另一个文件bunny1209.log
1 | sed -n "/2024-12-09 10/,/2024-12-09 12/p" nohup.out >> bunny1209.log |
sed(stream editor)是一种流编辑器,它在Linux和类Unix系统中被广泛使用,用于对文本文件进行查找、替换、删除、插入等操作。sed通过逐行读取输入文件(或标准输入),然后根据指定的脚本(通常是一系列的编辑命令)对每一行进行处理,并将处理后的结果输出到标准输出(或指定的输出文件)。
基本语法
sed的基本语法如下:
1 | sed [选项]... '脚本' 文件... |
常用命令
以下是一些常用的sed命令:
1 | s/原字符串/新字符串/g:将每一行中的所有原字符串替换为新字符串。g表示全局替换,即替换每一行中的所有匹配项。 |
示例
替换文本:
1 | sed 's/foo/bar/' file.txt |
将file.txt中每一行的第一个foo替换为bar。
全局替换:
1 | sed 's/foo/bar/g' file.txt |
将file.txt中每一行的所有foo替换为bar。
删除行:
1 | sed '/pattern/d' file.txt |
删除包含pattern的行。
打印行:
1 | sed -n '/pattern/p' file.txt |
打印包含pattern的行(-n选项用于抑制默认输出)。
添加新行:
1 | sed '/pattern/a\ This is a new line' file.txt |
在包含pattern的行的后面添加“This is a new line”。
直接修改文件:
1 | sed -i 's/foo/bar/g' file.txt |
直接修改file.txt,将每一行的foo替换为bar,而不是输出到标准输出。
注意事项
sed命令对大小写敏感。
脚本中的特殊字符(如/、&、*等)可能需要转义。
使用-i选项时要小心,因为它会直接修改文件内容,而不是创建备份。
grep
Linux中的grep命令是一种强大的文本搜索工具,它用于在文件中查找特定的字符串或模式,并将匹配的行显示出来。
基本语法
1 | grep [选项] 模式 [文件...] |
其中,选项是可选的,用于定制grep的功能;模式是要搜索的字符串或正则表达式;文件是要搜索的文件名,可以是一个或多个。如果省略文件参数,则默认从标准输入中读取数据。
常用选项
1 | -i:忽略大小写,进行不区分大小写的匹配。 |
模式
普通字符串:可以直接指定需要搜索的普通字符串。
正则表达式:使用正则表达式进行模式匹配,如“a.c”表示匹配任意字符a后面跟随任意字符c的字符串。
元字符:在正则表达式中用来表示特殊含义的字符,如.表示匹配任意字符,*表示匹配0次或多次,[]表示匹配指定范围内的字符等。
使用实例
在文件中查找包含“hello”的行:
1 | grep "hello" file.txt |
忽略大小写查找包含“hello”的行:
1 | grep -i "hello" file.txt |
查找不包含“world”的行:
1 | grep -v "world" file.txt |
查找包含“hello”的行并显示行号:
1 | grep -n "hello" file.txt |
递归搜索目录中包含“pattern”的文件:
1 | grep -r "pattern" /path/to/directory |
仅显示包含“pattern”的文件名:
1 | grep -l "pattern" file1 file2 |
awk
AWK是一种在Linux和Unix系统中广泛使用的文本处理工具,它以其强大的文本解析和处理能力而著称。
基本语法
AWK的基本语法结构为:
1 | awk [选项] '模式 {动作}' 文件名 |
其中,选项用于指定AWK命令的一些参数,如字段分隔符等;模式用于匹配文件中的行,可以是正则表达式或关系运算符模式;动作则是对符合模式的行执行的操作,如打印、计算等。
常用选项
1 | -F:指定输入文件字段分隔符,默认为空白字符。 |
内置变量
AWK提供了许多内置变量,可以在脚本中直接使用:
1 | $0:代表整个行。 |
使用实例
打印文件中的所有行:
1 | awk '{print}' 文件名 |
打印文件的第一个字段:
1 | awk '{print $1}' 文件名 |
使用冒号作为字段分隔符,打印第一个字段:
1 | awk -F: '{print $1}' /etc/passwd |
过滤出字段3大于10的行并输出:
1 | awk '$3 > 10 {print}' 文件名 |
计算文件中第一个字段的总和并输出结果:
1 | awk '{sum += $1} END {print sum}' 文件名 |
自定义输出格式,按照固定宽度打印前两个字段:
1 | awk '{printf "%-10s %-5s\n", $1, $2}' 文件名 |
统计文件中包含指定模式的行数:
1 | awk '/pattern/ {count++} END {print count}' 文件名 |
高级用法
多文件处理:AWK可以同时处理多个文件,每个文件的处理可以是相同的或不同的。
数组和关联数组:AWK支持数组和关联数组,可以用于存储和处理复杂的数据结构。
自定义函数:用户可以编写自定义函数来扩展AWK的功能,以满足特定的需求。
正则表达式:AWK支持正则表达式匹配和替换,可以用于更复杂的文本处理任务。
应用场景
AWK常用于日志分析、生成报告、文本提取与转换等场景。例如,可以使用AWK分析Nginx访问日志,统计访问IP次数、访问最多的页面等信息。