文本三剑客(其一 sed篇)

linux文本三剑客

  • grep
  • sed
  • awk 

sed -e 增删改查的命令格式 文件

test.txt   增删改查的命令格式

sed -f test.txt   目标文件

sed的执行过程

  1. 读取  目标文件 的每行数据依次加入到缓冲区(模式空间)里,默认从第一行开始读取
  2. 执行  使用定义的增删改查命令来处理读取到缓冲区行数据
  3. 显示  将处理后的行数据输出到屏幕显示

sed -e '操作命令' 目标文件 ....               #在命令行指定操作命令处理文件行数据

在一个脚本文件里定义操作命令

sed -f 脚本文件  目标文件 ....                     #使用指定脚本文件里的操作命令处理文件行数据

大括号可以省略 

直接根据操作命令修改原文件行数据

sed -i                                         #直接根据操作命令修改原文件行数据

test1.txt
1           
2
3
4
5
6

常用选项:

-e 或--expression=:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。
-h 或--help:显示帮助。
-n、--quiet 或 silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i:直接修改目标文本文件。

常用操作:

s:替换,替换指定字符。
d:删除,删除选定的行。
a:增加,在当前行下面增加一行指定内容。
i:插入,在选定行上面插入一行指定内容。
c:替换,将选定行替换为指定内容。
y:字符转换,转换前后的字符长度必须相同。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
=:打印行号。
l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

$p显示最后一行

数字p  第几行

'数字1,数字2’ x-x行

读取 sed -n -e '2,${n;p}' test1.txt

第一次过程   读取 第二行    执行 先n 跳到下一行 (第三行)   再p 打印第三行内容 
第二次过程   读取 第四行    执行 先n 跳到下一行 (第五行)   再p 打印第五行内容 
第三次过程   读取 第六行    执行 先n 跳到下一行 (第七行)   再p 打印第七行内容 

 打印前五行并退出

奇偶数行的判断

从第几行开始   每隔着多少跨多少行

n不重复显示

-e指定命令

r 支持扩展,,,,

p打印行类荣  = 打印行号

行号行内容都要!


f包含不论哪个位置


第一个代码 1代表从第一行开始


扩展元字符+r

基础不用加
 

sed删除

sed -e '删操作' -e '查操作'  目标文件

sed -e '{
删操作
查操作
}' 目标文件

删除可登录用户

打印内容   p(打印行内容)  =(打印行号)   l(打印ASCII字符)

sed -n -e '行号区间p'                         #根据行号或行区间进行打印

sed -n -e'起始行号,终止行号p'          #根据行区间进行打印“

sed -n -e '/字符串/p'                          #根据字符串匹配行进行打印
sed -n -r -e '/正则表达式/p'                #根据正则表达式匹配行进行打印
sed -n -e '1~2p'                                 #从第一行开始每隔2行查看


删除    d

sed -e '行号区间d'
sed -e '/字符串/d'
sed -r -e '/正则表达式/d'

 删除可登录用户

从一个包含x的行 删除到 从一个包含x的行 再继续扫描  在如上  如果有1没有3  就一直删到底

文件里面定义操作命令

 -i 永久删除


替换    s(字符串替换)    c(整行内容替换)     y(对应字符替换)

sed -e '行号区间 s/old/new/g'           sed -n -e '行号区间 s/old/new/gp'    #打印被修改的行        sed -e '行号区间 s/old/new/gw 保存文件'     #保存被修改的行
sed -e '/字符串/ s/old/new/g'
sed -r -e '/正则表达式/ s/old/new/g'
sed -r -e 's/(xxx)(xxx)(xxx)/\3\2\1/'

sed -e '行号c 新行内容'
sed -e '/字符串/c 新行内容'

sed -e 'y/旧字符/新字符/'      #注:新字符和旧字符的长度要一致

 只替换第一个

 替换所有

替换第二个

删# 

加#

#代表旧字符串前面加上#

w 只保存被修改的行内容 

 


插入    a(在指定行下面插入行内容)   i(在指定行上面插入行内容)    r(在指定行下面插入整个文件内容)

sed -e '行号区间a 行内容'
sed -r -e '/字符串或正则/a 行内容'

sed -e '行号区间i 行内容'
sed -r -e '/字符串或正则/i 行内容'

sed -e '行号区间r 文件'


复制粘贴   H(复制指定行到剪切板)    G(将剪切板内容粘贴到指定行下面)

sed -e '1,3H;$G'           #将1-3行内容复制粘贴到最后一行下面
sed -e '1,3{H;d};$G'       #将1-3行内容剪切粘贴到最后一行下面

1~3复制 

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值