巴中市网站建设_网站建设公司_表单提交_seo优化
2025/12/27 1:59:00 网站建设 项目流程

一、sed

sed(Stream EDitor)是 Linux/Unix 系统下一个非常强大且常用的流编辑器。它主要用于对文本进行过滤和转换,特点是按行处理

1、使用文件名1.txt,文件内容为
old new old old old old old old old OLD OLD OlD OLd oLD jaslkdja
2、基本语法
sed [选项] ‘命令’ 文件名 例: [root@qian ~]# sed 's/old/new' 1.txt new new new old old old old old new OLD OLD OlD OLd oLD jaslkdja 使用管道: 其他命令 | sed [选项] '命令' 例: head 1.txt | sed 's/old/new' 1.txt
3、替换命令
sed 's/old/new/g' 1.txt 默认值,只替换每行的第一个匹配 首字符: s:替换 末字符: g:全局替换 i:忽略大小写 数字:表示替换第几个匹配项 ​ 1.将所有的old都替换成new,精确匹配 sed 's/old/new/g' 1.txt ​ 2.仅替换每行第一个old为new sed 's/old/new/' 1.txt ​ 3.忽略大小写把所有的old都替换成new sed 's/old/new/ig' 1.txt ​ 4.将全文的第四个匹配项的old替换成new [root@qian ~]# sed 's/old/new/4' 1.txt old new old old old new old old old OLD OLD OlD OLd oLD jaslkdja
4、直接修改文件(-i)
1.将所有的old都替换成new,精确匹配 [root@qian ~]#sed -i 's/old/new/g' 1.txt 静默输出 [root@qian ~]#cat 1.txt ​ 2.将全文的第四个匹配项的old替换成new sed 's/old/new/4' 1.txt [root@qian ~]# cat 1.txt old new old old old new old old old OLD OLD OlD OLd oLD jaslkdja
5、删除文件中的内容(d)
1.删除文件中的第四行 sed -i '4d' 1.txt ​ 2.删除文件中的最后一行 sed -i '$d' 1.txt ​ 3.删除所有空白行 sed '/^$/d' 1.txt 或 sed '/^[[:space:]]*$/d' 1.txt 其中空白行有空格或制表符 ​ 例: [root@qian ~]# sed '/^[[space::]]/d' 1.txt old new old old old new old old old OLD OLD OlD OLd oLD [root@qian ~]# sed '/^[[:space:]]/d' 1.txt old new old old old new old old old OLD OLD OlD OLd oLD ​ 4.删除包含字符串的行 sed '/error/d' 1.txt
6、打印到终端页面(p)
通常与 -n(静默模式,不打印所有行)一起使用 1.查看文件的第5行到第10行 sed -n '5,10p' 1.txt ​ 2.查看只包含error的行,类似grep sed -n '/error/p' 1.txt
7、追加(a)和插入(i)
a\:在指定行之后追加文本。 1.在第2行插入一行“error is not bad” sed '2a\error is not bad' 1.txt ​ i\:在指定行之前插入文本。 2.在第3行前插入“success is good” sed '3i\success is good' 1.txt ​ 3.在最后一行之后追加“---END---” sed '$a\---END---' 1.txt ​ 4.在所有包含“server {”之后的行追加“listen 8080” sed '/server {/a\ listen 8080;' 1.txt
8、高阶用法
1.使用-e选项执行多个命令,或者用分号;分隔 sed -e 's/old/new/g' -e '/server/d' 1.txt 或 sed -e 's/old/new/g;/server/d' 1.txt ​ 2.使用正则表达式 默认使用BRE,使用-r或者-E(取决于系统),来启用扩展正则表达式。 可以直接使用 + , ? , | , ()等字符不用转义 使用扩展正则表达式匹配1个或多个数字 sed -r 's/[0-9]+/NUM/g' 1.txt 如果不使用-r参数,需写成 sed -r 's/[0-9]\+/NUM/g' 1.txt ​ 3,反向引用 在替换模式中使用 \( 和 \) 分组,然后用 \1, \2 等来引用它们。 echo "Hello World" | sed 's/\(.*\) \(.*\)/\2 \1/' 或 echo "Hello World" | sed -r 's/(.*) (.*)/\2 \1/'
9、经典场景速查表
场景命令
全局替换sed 's/old/new/g' file
删除空白行sed '/^$/d' file
显示特定行sed -n '10p' file(显示第10行)
删除包含模式的行sed '/pattern/d' file
在行前插入sed '5i\new line' file(在第5行前插入)
在行后追加sed '/pattern/a\new line' file(在匹配行后追加)
直接修改文件sed -i 's/old/new/g' file
备份并修改sed -i.bak 's/old/new/g' file
调换两列数据sed -r 's/([^ ]*) ([^ ]*)/\2 \1/' file

二、awk

awk 是一款功能强大的文本处理和数据分析工具,它不仅仅是命令,更是一门编程语言。它的设计初衷是用于处理结构化文本数据(如日志、CSV文件等),其核心思想是基于列和模式匹配进行处理。

此次文件为awk.txt [root@qian ~]# cat awk.txt 1 /usr/lib/systemd/systemd 2 [kthreadd] error is not bad
1、基本语法:
awk '模式 {动作}' 文件名 例: 将1.txt文件中第二列和第十一列数据输出到终端上 awk '{print $2, $11}' 1.txt ​ 使用管道 其他命令 | awk '模式 {动作}' 例: 打印第2列(PID)和第11列(COMMAND)数据到终端上 ps aux | awk '{print $2, $11}'
2、核心概念:
1.记录与字段 记录:默认一行就是一条记录 字段:默认以空格或制表符为分隔符,将每条记录分割成多个字段。 $0:代表整条记录。 $1:代表第一个字段。 $2:代表第二个字段。 ... 以此类推。 $NF:代表最后一个字段。 ​ 2.内置变量 FS:输入字段分隔符,默认为空格。 OFS:输出字段分隔符,默认为空格。 RS:输入记录分隔符,默认为换行符。 ORS:输出记录分隔符,默认为换行符。 NF:当前记录中的字段数量。 NR:当前处理的记录号(行号)。 FNR:当前文件的记录号(处理多个文件时与NR不同)。 ​ 3.工作流程 BEGIN { ... }:在处理任何输入行之前执行一次。 模式 { ... }:对于匹配模式的每一行,执行动作。 END { ... }:在处理完所有输入行之后执行一次。
3、日常使用
1.打印最后一列 awk '{print $NF}' 1.txt ​ 2.打印倒数第二列 awk '{print $(NF-1)}' 1.txt ​ 3,打印第一列大于100的行 awk '$1 > 100' 1.txt ​ 4.打印awk.txt中第一个数字为1的行 [root@qian ~]# awk '$1 ==1' awk.txt 1 /usr/lib/systemd/systemd ​ 5.打印包含“error”关键字的行 [root@qian ~]# awk '/error/' awk.txt error is not bad ​ 6.打印第1列包含 "" 或者 第2列等于0的行 awk '$2 ~ /usr/ || $2 == 0' awk.txt ​ 7.打印第2列大于50 并且 第3列小于100的行 awk '$2 > 50 && $3 < 100' awk.txt
4、NR和FNR的使用
1.打印第9行到第10行 [root@qian ~]# awk 'NR>=9 && NR<=10' awk.txt 2 [kthreadd] error is not bad ​ 2.打印文件第一行(表头) awk 'NR==1' awk.txt
5、计算与统计
1.计算文件行数 awk 'END {print NR}' awk.txt ​ 2.对第三列求和 awk '{sum += $3} END {print sum}' awk.txt
6、修改输出格式,使用OFS和printf
1.改变输出分隔符(例如,用冒号连接字段) awk -v OFS=':' '{print $1, $2, $3}' awk.txt # 或者使用 BEGIN 块 awk 'BEGIN {OFS=":"} {print $1, $2, $3}' awk.txt ​ 2.格式化输出 将第一列左对齐,宽度10,第二列右对齐,宽度5 awk '{printf "%-10s %5d\n", $1, $2}' awk.txt
7、高阶用法
1.指定分隔符(-F) 由于/etc/passwd里的数据都是由:组成 root:x:0:0:root:/root:/bin/bash cat /etc/passwd | awk -F':' '{print $1,$2,$3}' root x 0 ​ 2.使用多个分隔符 awk -F'[ :]' '{print $1, $3}' /etc/passwd ​ 3.在代码中指定分隔符 awk 'BEGIN {FS=":"} {print $1}' /etc/passwd
8、经典场景速查表
场景命令
打印特定列awk '{print $1, $3}' file
打印最后一列awk '{print $NF}' file
过滤第一列大于10的行awk '$1 > 10' file
过滤包含"error"的行awk '/error/' file
打印行号awk '{print NR, $0}' file
计算行数awk 'END{print NR}' file
对第一列求和awk '{sum+=$1} END{print sum}' file
处理CSV文件awk -F',' '{print $2}' file.csv
修改输出分隔符awk -v OFS='\t' '{print $1, $2}' file
打印第5到第10行awk 'NR>=5 && NR<=10' file

三、grep

grep(Global Regular Expression Print)是 Linux/Unix 系统下最常用、最强大的文本搜索工具。它的核心功能就是在一个或多个文件中,按照给定的模式(字符串或正则表达式)进行搜索,并打印出匹配的行。

1、基本语法
grep [选项] '搜索模式' [文件...] 例: 搜索出message日志中error字段的数据 grep 'error' /var/log/messages ​ 或 使用管道 cat /var/log/messages | grep 'error'
2、忽略大小写(i)
grep -i 'error' /var/log/messages
3、反向搜索(v)
查找message日志中除了success字段的数据 grep -v 'success' /var/log/messages ​ 结合管道,过滤掉注释行(以#开头)和空行 grep -v '^#' /etc/selinux/config | grep -v '^$'
4、显示行号(n)
grep -n 'disabled' /etc/selinux/config
5、统计匹配行数(c)
grep -c 'disabled' /etc/selinux/config
6、递归搜索(r)
在当前目录及所有子目录的 .java 文件中搜索 "ArrayList" grep -r 'ArrayList' . ​ 在当前目录及所有子目录的 .java 文件中搜索 "ArrayList" grep -r 'ArrayList' .
7、只显示匹配部分(o)
[root@qian ~]# grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' awk.txt 15235233442@163.com
8、显示上下文
1.-A NUM:显示匹配行之后的 NUM 行。 搜索 "Exception",并显示其后5行(通常包含堆栈跟踪信息) grep -A 5 'Exception' app.log ​ 2.-B NUM:显示匹配行之前的 NUM 行。 搜索 "error",并显示其后4行 grep -B 4 'error' app.log ​ 3.-C NUM:显示匹配行前后的 NUM 行。 搜索panic,并输出前后3行 grep -C 3 'panic' kernel.log
9、正则表达式搜索(-E或egrep)
1.搜索多个模式 grep -E 'error|warning' logfile.txt ​ 2.匹配一个或多个() ​ 3.匹配特定次数的重复 # 匹配10位数字(例如手机号) grep -E '[0-9]{10}' logfile.txt
10、常用的正则表达式
^pattern:匹配以 pattern 开头的行。 ​ pattern$:匹配以 pattern 结尾的行。 ​ ^$:匹配空行。 ​ .:匹配任意一个字符。 ​ *:匹配前一个字符0次或多次。 ​ .*:匹配任意字符任意次数(通配)。 ​ [abc]:匹配 a, b, 或 c 中的任意一个字符。 ​ [^abc]:匹配除了 a, b, c 之外的任何字符。 ​ [0-9]:匹配任意数字。 ​ [a-zA-Z]:匹配任意字母。
11、经典场景速查表
场景命令
基本搜索grep 'hello' file.txt
忽略大小写grep -i 'hello' file.txt
显示行号grep -n 'hello' file.txt
统计出现次数grep -c 'hello' file.txt
反向搜索grep -v 'world' file.txt
递归搜索目录grep -r 'main' /path/to/code/
只显示匹配部分grep -o '[0-9]*' file.txt
搜索多个模式grep -E 'err|warn' file.txt
搜索以...开头的行grep '^Starting' file.txt
搜索以...结尾的行grep 'end$' file.txt
查找空行grep '^$' file.txt
显示匹配行前后内容grep -C 2 'crash' file.txt
在压缩文件中搜索zgrep 'error' /var/log/syslog.1.gz
12、实用组合与技巧
1.管道组合 查找特定进程 ps aux | grep 'nginx' ​ 分析日志 # 统计某个API接口被调用的次数 grep 'GET /api/user' access.log | wc -l # 找到最近的错误,并查看其上下文 tail -100 app.log | grep -C 5 -i 'exception' ​ 2.压缩文件中搜索(zgrep,zcat) 注:.gz压缩文件,无需解压即可搜索 zgrep 'error' /var/log/syslog.2.gz # 或者 zcat file.gz | grep 'pattern' ​ 3.固定单词匹配 -w grep -w 'is' file.txt # 会匹配 "is",但不会匹配 "this" 或 "island" ​ 4.静默模式 -q 不输出任何内容,只根据是否匹配到返回退出状态码($?为0表示匹配成功)。常用于脚本判断。 if grep -q 'critical error' logfile.txt; then echo "发现严重错误!" exit 1 fi

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询