关于sed 至少要掌握这些

8 篇文章 0 订阅
4 篇文章 0 订阅

sed-最常用基础知识

基本语法/格式

sed -option 'command script' file

# -option并不总是需要
sed 'command script' file

其中要特别注意 -i选项,没有带-i选项都只是对出力结果的处理,并没有直接编辑原文件。

# 直接编辑原文件
sed -i 'command script' file.txt

# 没有-i,不会影响原文件
sed 'command script' file.txt
# 有需要可以另存输出结果
sed 'command script' file.txt > file1.txt

有时也许你会发现,例如像sed -s/cat/dog/ file.txt 这样不加引号的命令也能执行,这是因为这个命令中刚好没有空格,虽然偶尔能成功但不适用于大部分命令带空格的情况,所以还是要养成好习惯,给命令加上单引号。

一些常见的option参考

短option (-)长option (- -)内容注意
-f–file-f后面跟内容为执行命令的文件,表示执行文件中的命令
-e script–expression=script添加执行的命令,通过并列多个-e script可一次执行多个命令
-i–in-place直接编辑文件
-i后缀词–in-place=后缀词直接编辑文件同时,生成加上指定后缀的原文件备份。例,-i.bak 会将原文件备份为test.txt.bak 。注意-i和后缀词之间没有空格。
-n–quiet,–silent不打印 命令所涉及行 以外的行 (只打印受影响的行)

执行sed命令文件

就像上面option参考表格中写到,-f是使用命令文件的选项,-f后面要跟一个写好命令的文件。

语法

# scriptfile是写有命令的文件,file是被命令操作的文件对象
sed -f scriptfile file

例,

$ cat copy.txt 
cat cat
cat cat

#  command.txt 的内容为将第一行的cat换为dog的命令
$ cat command.txt 
1s/cat/dog/g

# 执行这个文件里的命令(并没有对原文件进行直接编辑)
$ sed -f command.txt copy.txt 
dog dog
cat cat

字符串的替换

关于字符串替换的内容,总结在这篇博客文章里了。
sed 字符串替换 csdn文章链接

输出指定的行

话题相关
这个操作可以回答如下问题
#linux 如何输出文件指定行
#shell 如何输出文件指定行
#sed 输出文件指定行

语法

# 打印第5行
sed -n '5p' file

-n,上面option参考表格中也介绍了,在sed后面加 -n,是阻止默认的自动打印模式的选项;
p,同时在行号后写p,表明打印print/输出。

具体来说,

# 打印输出第5行
sed -n '5p' test.txt
# 打印输出第3,4行
sed -n '3,4p' test.txt

# 除去第5行,打印输出
sed -n '5!p' test.txt
# 除去第3,4行,打印输出
sed -n '3,4!p' test.txt

# 输出含有hello的行
sed -n '/hello/p' test.txt
# 输出 除了含有hello的行
sed -n '/hello/!p' test.txt

其中,sed -n ‘5!p’ test.txt 与接下来要说的删除指定行d命令的 sed ‘5d’ test.txt是同效果的。

使用正则表达式

语法

# 用逗号隔开选定范围的开始与结束
sed -n '/cat/,/dog/p' test.txt

意为,打印从含有第一个含有cat的行开始,到第一个含有dog的行。

添加插入文本

关于用sed添加插入文本的内容,总结在这篇博客文章里了。
sed 插入文本 csdn文章链接

删除指定行

话题相关
这个操作可以回答如下问题
#linux 如何删除文件指定行
#shell 如何删除文件指定行
#sed 删除文件指定行

语法
d来表示删除

# 删除原文件第2行后输出(并没有对原文件进行直接编辑)
sed '2d' file 

具体来说,

# 输出除了第二行以外的行
sed '2d' test.txt

# 删除第3行到第5行
sed '3,5d' test.txt

# 删除第3行到最后一行以后输出 $为最后一行
sed '3,$d' test.txt

# 只输出第3行;以下两个写法等效
sed '3!d' test.txt
sed -n '3p' test.txt

# 删除含有hello的行
sed '/hello/d' test.txt

# 删除 除了含有hello的行
sed '/hello/!d' test.txt

# 删除第1行,且删除第3行到最后一行以后输出; 以下两个写法等效
sed '1d;3,$d' test.txt 

sed -e '1d' -e '3,$d' test.txt 

退出/停止

话题相关
这个q命令操作可以回答如下问题
#linux 如何打印文档前10行
#shell 如何只输出文件前10行

语法
退出sed,用q命令

# 打印到第10行,停止;即打印前10行
sed '10q' file

# 与正则表达式结合
# 打印到第一个abc所在的行,停止
sed '/abc/q' file

(以上。)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值