Linux三剑客笔记

grep

用于查找一个或多个文件里符合条件的字符串,默认输出匹配的行
格式:grep [option...] [patterns...] [file1,file2...]

-A num :在匹配的行之后,尾随打印后num行
-B num :在匹配的行打印之前,打印前num行
-C num :在匹配的行前后,各打印num行
--group=string : 在使用-A -B -C时,每个文件输出行直接打印的分隔符,默认是 --
--no-group : 在使用-A -B -C时,不要在每组之间打印分隔符
-a :像处理文本一样处理二进制文件
-b :在匹配行前面,显示该行第一个字符的编号(从0开始,shell默认前后有0字节)
-c :输出匹配到的行数
-d(-r) : 递归读取和处理目录中的所有文件
-e : 指定匹配模式,通常省略
-f : 指定规则文件,从文件中读取匹配模式,一行为一个模式
-h :匹配行前面,不显示该行所属的文件名(单文件查找的默认值)
-H :匹配行前面,显示该行所属的文件名(多文件查找的默认值)
-i (-y):忽略大小写
-I : 打印有匹配的输入文件的名称(大写i)
-L : 打印没有匹配的输入文件的名称
-m num : 指定最大的匹配行数,匹配num行就停止
-n : 在匹配行前面,输出行号,从1开始
-o : 只打印匹配部分(没啥用)
-q : 静默输出,不输出任何内容
-s : 不显示错误信息
-v : 反转匹配,输出未匹配上的行
-w : 全词匹配
-x : 整行匹配
-G : 将模式解释为基本的表达式(默认)
-E :将模式解释为延伸的正则表达式
-F :将模式解释为固定的字符串,而不是正则表达式
匹配模式:-G -E -F -P
匹配控制:-e -f -i -y --no-igonre-case** -v -w -x(< 和/>匹配单次开头和结尾)
输出控制: -c -I -L-m -o -q -s
输出行的前缀字段控制:-b
-n** -h -H (-T -z )
输出行上下文控制: -A -B -C --group=storing --no-group
文件和目录的选择:-a -d** -r** -R

Sed

  • Sed(流编辑器)是非交互式命令行文本编辑器。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等
  • Sed通常用于过滤文本,也就是说,它接受文本输入,对其执行一些操作(或一组操作),并输出修改后的文本。Sed通常用于使用模式匹配来提取文件的一部分或替换文件中多次出现的字符串。

参数说明:
-e <script> :指定脚本,通常单个脚本时省略
-f <script文件> :读取脚本文件,使用文件中的脚本来处理文件
-h :显示帮助
-n :默认情况下,sed打印所有处理过的输入。-n限制输出,p命令打印特定的行
-s :当输入多个文件时,分开处理每个文件(sed默认将多个输入文件视为一个长流)
-V :显示版本信息

动作说明:

a : 新增,a的后面接字符串,在指定行的下一行新增字符串
c:取代,c的后面接字符串,可以取代n1,n2之间的行
d:删除,后面不接任何东西
i:插入,i的后面接字符串,在指定行的上一行新增字符串。配合s 使用时,可以在原文件中修改;后面可跟参数(比如i.bak)
p: 打印,也可以将某个选择的数据打印。通常会与 -n 一起使用
S:取代,可以直接进行取代的工作,通常搭配正则使用,例如:sed ****‘****1,20s/old/new/g****’
g:全局,默认替换只替换每行的第一个匹配,加上g可以全局替换匹配
q:退出
注:1,sed后面的动作,必须用单引号括起来
2,字符串前后必须用正斜杠: ‘****/字符串/****’
3,如果遇到路径匹配,需用其他字符包裹,例:****’****s/\bin/bash/****’
1,下面的示例打印第一个文件(one.txt)的第一行和最后一个文件(three.txt)的最后一行
sed -n ‘1p;$p’ one.txt two.txt three.txt

2,使用-s参数会分开处理每个文件,下面的例子会返回每个文件的第一行和最后一行
sed -ns ‘1p;$p’ one.txt two.txt three.txt

3,替换文件中每行的第一个hello为hi
sed ‘s/hello/hi/’ file

4,替换文件中的所有hello 为 hi (g的使用)
sed ‘s/hello/hi/g’ file

以行为单位的新增/删除**** a i d

在 testfile 文件的第四行后添加一行,并将结果输出到标准输出
sed ‘4a new line txt’ testfile
sed ‘5i new line txt’ testfile

** 第4行后面,即是第5行。所以4a 等同于 5i
在 testfile 文件的第四行后添加2行,并将结果输出到标准输出
sed ‘4a new line txt
Two new line222’ testfile

** 行与行之间需要用反斜杠 \ 来进行新行标记,并且需要换行
将 testfile 的内容列出并且列印行号,同时,请将第 2~5 行删除!
nl testfile | sed ‘2,5d’
只要删除第 2 行:
sed ‘2d’ testfile
要删除第 3行以及第5到最后一行:
sed ‘3d;5,$d’ testfile

** 分号隔开命令,逗号是区间连接,$表示最后一行,d表示删除

以行为单位的替换与显示****c和p

将第 2-5 行的内容取代成为 No 2-5 number

sed ‘2,5c NO 2-5 number’ file

仅列出 testfile 文件内的第 5-7 行(n禁止输出,p选择行输出)

sed -n ‘5,7p’ file

搜索 testfile 有 oo 关键字的行

sed -n ‘/oo/p’ testfle

删除 testfile 所有包含 oo 的行,其他行输出

sed ‘/oo/d’ testfle

搜索 testfile,把 所有的oo 替换为 kk,再输出匹配到的行

sed -n ‘s/oo/kk/gp’ testfile

将 testfile 文件中每行第一次出现的 oo 用字符串 kk 替换,然后将该文件内容输出到标准

sed ‘s/oo/kk/p’ testfile

利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test(最后一行后面新增,修改原文件)

sed -i ‘$a # This is a test’ testfile

也可以用echo来实现

echo this is a test >> testfile

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

sed -i 's/.$/!/' testfile

一条 sed 命令,删除 testfile 第三行到末尾的数据,并把 HELLO 替换为 RUNOOB :

sed -i -e ‘3,$d’-e ‘s/HELLO/RUNOOB/g’ testfile

打印第一个文件的第一行,和最后一个文件的最后一行

sed -n ‘1p;$p’ file1 file2 file3

打印每个输入文件的第一行和最后一行(-s)

sed -ns ‘1p;$p’ file1 file2 file3

-i 后面如果不跟扩展名,则修改覆盖原文件,如果跟扩展名,则覆盖原文件后会生成一个备份文件,文件名为原文件名.扩展名

sed -i.bak ‘s/hello/word/’ file 修改原文件,且生成一个file.bak的备份文件

Sed -i ‘s/hello/word/’ file 修改原文件,没有备份文件

打印所有的行,如果找到foo开头的行,则退出,状态为35(可自定义),如果没有找到这样的行,sed将自动退出,状态为0

sed ‘/^foo/q35’ file

地址选择行:****地址决定了sed命令将在哪些行上执行,如果不指定则在所有行上执行。

多个地址之间用逗号表示地址范围,地址可以是数字、正则或者两者的结合。

在地址的末尾(即字母s的前面)加!,表示不匹配

在所有行上执行sed命令

sed ‘/s/hello/word/’ file

只在140行上执行sed命令

sed ‘140s/hello/word/’ file

只在包含apple的行中执行替换命令

sed ‘/apple/s/hello/word/’ file

在10到20行上执行sed命令

sed ‘10,20s/hello/word/’ file

在4到17行之外执行命令

sed ‘4,17!s/hello/word/’ file

数字选择行:****number(指定行),$(最后一行),frist~step(GUN扩展,从first行起,每step行打印一行,0在此处有效)

打印2到7行

seq 10 | sed ‘2,7p’

打印3,4-6以及最后一行

seq 10 | sed ‘3p;4,6p;$p’

从第3行开始,每3行打印一行(即3,6,9)

seq 10 | sed ‘3~3p’

打印奇数行(即1,3,5,7,9, 从1开始,每2行打印一行。seq生成序列)

seq 10 | sed ‘0~2’

打印偶数行(即2,4,6,8,10,从0开始,每2行打印一行)

seq 10 | sed ‘0~2’

通过文本匹配行:****GUN支持BRE和ERE正则表达式,默认BRE。当使用-E或-R表达式时,需要使用ERE正则表达式。

BRE:https://www.gnu.org/software/sed/manual/sed.html#BRE-syntax

ERE:<u>https://www.gnu.org/software/sed/manual/sed.html#ERE-syntax</u>

/regexp/ 选择任何匹配正则表达式的行,如果regexp包含/,需要用反斜杠\来转义,如果包含多个/,则可以使用此方法:%regexp

/regexp/I (大写的i),忽略大小写

/regexp/M ,多行匹配

awk :

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容