Linux命令


sed主要以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。其实也可以不以行为单位进行处理,后面再提。

sed命令常用参数

sedoption处理文本文件,并输出到标准输出(控制台)command含义
-e(expression)可以指定多个多个命令a \(append)在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
-f(file) 指定一个命令文件i \(insert)在当前行之前插入文本。多行时除最后一行外,每行末尾需用 “\” 续行
-n(slient)取消默认控制台输出,与p一起使用可打印指定内容d(delete)删除
-i(in-place就地)会直接改变源文件,默认不改变p(print)打印,与-n参数一起,可打印指定的行
c \(replace)用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用 “\” 续行
s(substitue)s/regexp/replacement/对匹配的内容进行替换

常见的语法示例

#1新增a
##在第 2 行后面新增一行内容
sed '2a testContent' test.txt
##在第 2 行后面新增两行行内容
sed '2a testContent \
testContent' test.txt
##在原文的第 1~3 行后面各新增一行内容
sed '1,3a testContent' test.txt
##在原文的第 1~3 行后面各新增2行内容
sed '1,3a testContent \
testContent' test.txt

#2替换c \
##将第 2 行内容整行替换
sed '2c testContent' test.txt
##将第 1~3 行内容替换成一行指定内容
sed '1,3c testContent' test.txt

#3删除 d
##删除第 2 行
sed '2d' test.txt
##删除第1~3行
sed '1,3d' test.txt
#插入 i \
##在第 2 行前面插入一行内容
sed '2i testContent' test.txt
##在原文的第 1~3 行前面各插入一行内容
sed '1,3i testContent' test.txt

#打印 p
##重复打印第 2 行(第二行会打印两遍,其他行一遍)
sed '2p' test.txt
##重复打印第1~3行
sed '1,3p' test.txt
##只打印第 2 行
sed -n '2p' test.txt
##只打印第 1~3 行
sed -n '1,3p' test.txt
##打印匹配到user的行,类似grep
sed -n '/user/p' test.txt
## ! 反选,打印没有匹配到user的行
sed -n '/user/!p' test.txt
##将old替换为new,并将发生改变的行打印
sed -n 's/old/new/gp' test

#替换 s
##匹配每一行的第一个old替换为new
sed 's/old/new/' test.txt
##匹配所有old替换为new,g 代表一行多个,i 代表匹配忽略大小写
sed 's/old/new/gi' test.txt
##匹配第 3~9 行所有old替换为new
sed '3,9s/old/new/gi' test.txt
#参数 -e
##执行多个指令(指令顺序会影响结果)
sed -e 's/系统/00/g' -e '2d' test.txt

s(substitute)命令flags标记及功能(s/被替换/替换/flag)

[匹配条件]s/被替换/替换/flag

flags 标记功能
n1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记
g对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;
p会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。
w file将输出的结果写到指定的 file 文件中;
&用正则表达式匹配的内容进行替换;
\n匹配第 n 个子串,该子串之前在 pattern 中用 () 指定。
\转义(转义替换部分包含:&、\ 等)。
iignore 忽略大小写
#flag n 
##匹配每一行的第一个old替换为new
sed 's/old/new/1' test.txt
##与上等价
sed 's/old/new/' test.txt
##匹配每一行的第二个old替换为new
sed 's/old/new/2' test.txt
#flag g
##匹配每一行的所有的old替换为new
sed 's/old/new/g' test.txt
#flag p
##对改变的行会出现两次
sed 's/a/new/gp' test.txt
##-n 选项会禁止 sed 输出,但 p 标记会输出修改过的行,将二者匹配使用的效果就是只输出被替换命令修改过的行
sed -n 's/a/new/gp' test.txt
#flag w
#w 会将匹配后的结果保存到指定文件中(仅匹配的行),将test.txt中匹配的行写到test.ans中,没有test.ans会创建,有的话会覆盖
rm test.ans
sed 's/a/AA/w test.ans' test.txt
cat test.ans
##将含有a的行的数据写到test.ans中(仅匹配的行)
rm test.ans 
sed '/a/w test.ans' test.txt
cat test.ans
#flag & 用于代指前边匹配的字符,将匹配到的old替换为{old}
sed 's/old/{&}/' test.txt
#转义(转义替换部分包含:&、\ 等)。
##将字符/ 替换成 b
sed 's/\//b/' test.txt
##将字符& 替换成 c
sed 's/\&/c/' test.txt
##只对2-尾行的第一个old进行替换
sed '2,$s/old/{&}/' test.txt
##匹配所有old替换为new,g 代表一行多个,i 代表匹配忽略大小写
sed 's/old/new/gi' test.txt

sed d (delete)删除命令

[删除条件]d

##不加条件会删除所有,并不会改变源文件,只是显示为空
sed 'd' test.txt
##指定删除具体的2-5行
sed '2,5d' test.txt
##删除从第一个old匹配到的行到第一次匹配到a的行之间的所有的行,包括这两行
sed '/old/,/a/d' test.txt
##删除从第3行到结束
sed '3,$d' test.txt
##删除从第一个a开始到结束所有的行,看来匹配模式/xxx/和列是可以结合使用的
sed '/a/,$d' test.txt

sed a (append) i(insert) c(replace) r(read)命令

[后增条件] a \
[前插条件] i \
[替换条件] c\
[条件] r +文件名 在匹配行后面添加这个文本内容
多行时除最后一行外,每行末尾需用""续行。如果只有一行可以不写。

## a 命令表示在指定行的后面追加,i 命令表示在指定行的前插入,c命令替换指定行。替换成的内容可以是多行
#在第三行之前插入一行
sed '3i How are you?' test.txt
##与上等价
sed '3i \
How are you?' test.txt
## 在第三行前插入了多行
sed '3i \
How are you?\
I'm fine!' test.txt
## 在1-3行的每一行前面都插入一行
sed '1,3i How are you?' test.txt
## 从第一个old行到第3行,每行前都插入一行,看来匹配模式/xxx/和列是可以结合使用的
sed '/old/,3i How are you?' test.txt  
## a 和c,r 命令语法基本一致。r命令相当于是把要更换成的内容写在了一个文件中

sed y 字符替换脚本命令

y/source/dest/ 对source中的字符一一对应替换为dest中的字符
Transliterate the characters in the pattern space which appear in source to the corresponding character in dest.
y/ab/cd/ #将a替换成c,b替换成d,很简单

##d->w l->w o->n ,对文件中所有的字符都进行了替换,感觉像是有一个g(global)属性
sed 'y/dlo/wen/' test.txt

sed p(print)打印命令

注意与 -n的联合使用

sed w(write)将匹配的行写入指定文件中

# 注意test.ans是指定的文件,没有的话会自动创建,有的话会被覆盖
sed 's/a/AA/w test.ans' test.txt

sed q (quit)退出命令

q 命令的作用是使 sed 命令在第一次匹配任务结束后,退出 sed 程序,不再进行对后续数据的处理。

#打印到第二行就停止匹配了
sed '2q' test.txt
#当匹配到a的时候,将a替换成A以后就退出,{;}多个命令的组合
sed '/a/{ s/a/A/;q; }' test.txt

sed 脚本命令的条件

sed命令可以通过指定行号或者用文本模式来指定命令作用的特定行,如果不指定,默认作用于所有行

[条件]脚本命令
或者
[条件]{脚本命令;脚本命令;…}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值