首页 > 系统相关 >linux 三剑客grep、awk、sed(查找、分段、修改)

linux 三剑客grep、awk、sed(查找、分段、修改)

时间:2023-11-23 15:35:58浏览次数:33  
标签:grep 16210504 sed awk go txt 三剑客

一、grep

1.1 grep 常用命令及其含义

grep pattern file
grep -i pattern file 忽略大小写
grep -v pattern file  不显示匹配行
grep -o pattern file 只把每个匹配的内容独立的行显示
grep -E pattern file 使用拓展正则表达式
#注意:grep 'a[0-9]\{10\}' 等同于 grep -E 'a[0-9]{10}' 
grep -A -B -C pattern file 打印命中数据的上下文 -A:下文;-B:上文; -C:上下文
grep pattern -r dir/ 递归搜索
grep -m1 匹配匹配中的第一个
grep -n 顺便输出行号

二、awk

2.1 awk pattern语法
awk ‘pattern{action}’ ,默认以空格分隔

awk ‘BBEGIN{}END{}’ 开始和结束
awk ‘/Running/’ 正则匹配
awk ‘/aa/,/bb/’ 区间选择
awk ‘$2~/xxx/’ 字段匹配,这里指从第2个字段开始匹配包含xxx内容的行
awk ’NR==2’ 取第二行
awk ’NR>1’ 去掉第一行

2.2 awk字段处理
-F 参数指定字段分隔符
BEGIN{FS=‘_’} 也可以表示分隔符

$0 代表原来的行
$1 代表第一个字段
$N 代表第N个字段
$NF 代表最后一个字段

2.3 举例
awk命令从第九个字段位置开始匹配非200的状态码并打印出来然后进行排序->去重->按数字的倒叙进行排列。命令:

awk '$9!~/200/{print $9}' nginx.log | sort | uniq -c | sort -nr

命令含义

sort: 按从小到大进行排序
uniq -c :去重(相邻)
-nr: 按数字进行倒叙排序
-n:按数字进行排序

三、sed

3.1 sed 命令格式

sed [-nefri] [动作]
参数:
-n :使用安静(slient)模式。只有经过sed特殊处理的那一行(或者操作)才会被列出来。一般与p配合使用
-e :直接在命令行模式上进行sed的动作编辑
-f :直接将sed动作写在一个文件内,-f filename则可以执行filename 内的sed动作。
-r :sed的动作支持的是拓展正则表达式的语法(默认是基础正则表达式的语法)
-i :直接修改读取的文件内容,而不是由屏幕输出
动作说明:[[n1][,n2]]function

n1,n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20之间进行的,则“10,20[动作行为]”

function有下面这些参数:
a :新增
d :删除 (比较重要,测试工作中对数据处理时可快速去除无用信息,比如注释行,空白行等)
i :插入
p :打印 (一般与-n配合使用)
s :替换(重中之重!!!,s参数可以说是日常测试工作中对数据用sed清理过滤时使用率最高的了)

3.2 sed 修改表达式: sed 's/待修改/修改结果/'
表达式单引号中的s表示修改,/ 符号表示分隔,实际上将/换成其他符号也可以,只要能起到分隔作用就OK

3.3 举例

[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/'
aaa|BBB}|cccbbb
[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's#bbb#BBB#'
aaa|BBB}|cccbbb

若想讲目标中所有的字段都替换,需要在命令最后加上g:

[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/g'
aaa|BBB}|cccBBB

sed还可以修改文件中的内容,现在有文件text.txt,内容如下:

[16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txt
hello bash world
hi~ tester
go go go go!

用 sed 's/hello/HELLO/' text.txt 命令将文件中的 hello 替换成 HELLO :

[16210504@izuf60jasqavbxb9efockpz ~]$ sed 's/hello/HELLO/' text.txt
HELLO bash world
hi~ tester
go go go go!

但是此时我们打开源text.txt文件发下源文件内容并未改变:

[16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txt
hello bash world
hi~ tester
go go go go!

注意说明:

sed 在修改文件内容时,是另外开辟了一块模式空间,将修改后的内容放入并输出,源文件并未修改;

这时如果想要修改源文件就需要借助 -i 命令,另外为了防止误操作修改文件,一般可以采取这种写法: sed -i.bak 's/hello/HELLO/' text.txt ,这种写法在修改源文件的同时还会生成一份以.bak结尾的备份文件,相较安全。

[16210504@izuf60jasqavbxb9efockpz ~]$ sed -i.bak 's/hello/HELLO/' text.txt
[16210504@izuf60jasqavbxb9efockpz ~]$ ls
1  1.sh  Allen_qin  nginx.log  test  text.txt  text.txt.bak  while_test
[16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txt
HELLO bash world
hi~ tester
go go go go!
[16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txt.bak
hello bash world
hi~ tester
go go go go!

sed -e 命令可以直接在命令行模式上进行sed的动作编辑,但看解释比较晦涩,来看一个实例:

需求: 现有一个1.txt的文本,内容如下:

a:
b:
c:
d:

要将其中每行末尾的 : 都替换成 @ ,将 a 替换成 A ,并在文本末尾加上“ Sed Test ” 命令:

sed -i -e 's/:/@/g' \
-i -e 's/a/A/' \
-i -e '$a Sed Test' 1.txt

实例演示:

[16210504@izuf60jasqavbxb9efockpz ~]$ sed -i -e 's/:/@/g' -i -e 's/a/A/' -i -e '$a Sed Test' 1.txt
[16210504@izuf60jasqavbxb9efockpz ~]$ cat 1.txt
A@
b@
c@
d@
Sed Test

资料:
https://zhuanlan.zhihu.com/p/541581438

标签:grep,16210504,sed,awk,go,txt,三剑客
From: https://www.cnblogs.com/xiaohaigegede/p/17851648.html

相关文章

  • awk
    awk:能够对文本的每一行都进行复杂的格式处理,它支持关系运算符、算法运算符,正则表达式,if,while,for等逻辑,是一种处理文本的语言。基本格式: awk '{pattern+action}' <file>1、awk默认分隔符为空格和制表符,输出函数有print和printf,$1、$2...表示分割的字符举例: echo......
  • Linux文本三剑客-awk
    目录详解awk基础awk场景选项实验简单输出详解awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据转化成专业的Excel表的样式awk基础语法awk[option]'pattern[action]'file...awk参数'条件动作'文件action值得是动作,awk擅长文......
  • On Manipulating Signals of User-Item Graph A Jacobi Polynomial-based Graph Colla
    目录概符号说明MotivationJGCF代码GuoJ.,DuL,ChenX.,MaX.,FuQ.,HanS.,ZhangD.andZhangY.Onmanipulatingsignalsofuser-itemgraph:Ajacobipolynomial-basedgraphcollaborativefiltering.KDD,2023.概利用JacobiConvolution来区分高中低频信号......
  • 无涯教程-Sed - 特殊字符
    SED提供了两个特殊字符,它们被视为命令。本章说明了这两个特殊字符的用法。=命令"="命令显示行号。以下是"="命令的语法:[/pattern/]=[address1[,address2]]==命令将行号及其内容写入标准输出流。以下示例说明了这一点。[jerry]$sed'='books.txt执行上述代码后,您将......
  • 无涯教程-Sed - 模式范围
    本章介绍了SED如何处理PatternRange(模式范围)PatternRange可以是简单的文本或复杂的正则表达式。下面的示例打印作者Paulo的所有书籍。[jerry]$sed-n'/Paulo/p'books.txt执行上述代码后,您将得到以下输出:3)TheAlchemist,PauloCoelho,1975)ThePilgrimage,Paul......
  • 无涯教程-Sed - 分支操作
    可以使用 t命令创建分支。仅当上一个命令成功时,t命令才会跳转到标签。让无涯教程以与上一章相同的示例为例,但是现在不打印单个连字符(-),而是打印四个连字符。以下示例说明了t命令的用法。[jerry]$sed-n'h;n;H;xs/\n/,/:Loop/Paulo/s/^/-//----/!tLoopp'bo......
  • 无涯教程-Sed - 循环语句
    与其他编程语言一样,SED也提供了循环和分支函数来控制执行流程。在本章中,无涯教程将探索更多有关如何在SED中使用循环和分支的信息。SED中的循环的工作方式类似于goto语句。SED可以跳到标签所标签的行,然后继续执行其余命令。在SED中,可以如下定义label :label:start:end......
  • 学习笔记:A Survey on Large Language Model basedAutonomous Agents
    挑选了自己感兴趣的部分整理了一下。目录ASurveyonLargeLanguageModelbasedAutonomousAgents1LLM-AAConstruction1.1ArchitectureDesign2LLM-AAApplication3LLM-AAEvaluation4ChallengeASurveyonLargeLanguageModelbasedAutonomousAgents北大高林学院的......
  • 无涯教程-Sed - 简介
    sed(意为流编辑器,源自英语“streameditor”的缩写)是一个使用简单紧凑的编程语言来解析和转换文本Unix实用程序。sed由贝尔实验室的LeeE.McMahon于1973年至1974年开发,并且现在大多数操作系统都可以使用。sed基于交互式编辑器ed(“editor”,1971)和早期qed(“quickeditor”,1......
  • 【略读论文|时序知识图谱补全】DREAM: Adaptive Reinforcement Learning based on Att
    会议:SIGIR,时间:2023,学校:苏州大学计算机科学与技术学院,澳大利亚昆士兰布里斯班大学信息技术与电气工程学院,Griffith大学金海岸信息通信技术学院摘要:原因:现在的时序知识图谱推理方法无法生成显式推理路径,缺乏可解释性。方法迁移:由于强化学习(RL)用于传统知识图谱上的多跳推理开......