有没有大神帮忙解释下Sed 命令的r参数的用法,最好带例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有大神帮忙解释下Sed 命令的r参数的用法,最好带例子相关的知识,希望对你有一定的参考价值。

文档案例:sed ‘/test/r file’ filename 文档解释说,读取file文件的内容,显示在与test匹配的行的后面,如果匹配多行,则file的内容将显示在所有匹配行的后面,看文档说明,完全没有明白意思,做实验也没有看到啥效果,网上搜了半天,结果全是照抄文档的原话,并且都没有带例子,有没有linux高手给解释下,这个命令没搞懂,剩下的内容也看不下去了。。多谢

sed ‘/test/r file’ filename
就是说如果filename文件里面有 test单词的行, 会被/test/ 匹配到. /test/是针对filename文件.
然后 继续执行 r 读取命令, r读取命令是针对 file, 会把file文件全部读入, 然后在打印在 匹配行之后.
不知道讲明白没有, 可以在机子上实操一下就理解了. 不过这命令好像没有什么用, ^-^
参考技术A

r 即read命令,读取文本文件的内容并显示

echo a >>ab.txt
echo b >>ab.tx
sed '/test/r ab.txt'

如果在sed命令后输入包含test的行,则会显示ab.txt中的内容

参考技术B

用途:在文件的匹配行之后插入另外一个文件的内容

示例

sed '/UUID/r /etc/passwd' /etc/fstab 


#

# /etc/fstab

# Created by anaconda on Mon Apr 22 11:12:33 2019

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/centos_centos7--muban-root /                       xfs     defaults        0 0

UUID=192e541f-09a5-4629-8847-efe90d9fdb7a /boot                   xfs     defaults        0 0

root:x:0:0:root:/root:/bin/bash

postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin

/dev/mapper/centos_centos7--muban-swap swap                    swap    defaults        0 0


参考技术C sed '/2/r 1.txt' 2.txt 把1.txt的内容插入2.txt中匹配/2/的行后
sed '2r 1.txt' 2.txt 把1.txt的内容插入2.txt的第2行后
sed 'r 1.txt' 2.txt 在2.txt的每行后都插入1.txt的内容
[root@157 test1]# cat 2.txt
test1
test2
test3
test4
[root@157 test1]# cat 1.txt
a
b
[root@157 test1]# sed '/2/r 1.txt' 2.txt
test1
test2
a
b
test3
test4本回答被提问者采纳

shell中sed命令的用法

sed (stream editor)流编辑器也是linux中的一条命令,在shell中经常需要用到的非交互式修改文件内容的命令。sed处理文本是按行处理,也就是读一行处理一行。
sed的命令基本格式是:
sed 选项 ‘编辑指令‘ 文件路径
也可以通过管道(|)传输参数给sed处理 前置命令 | sed 选项 ‘编辑指令‘


sed的常用参数有:
-n 屏蔽默认输出;如果不加-n选项会全部输出文本满足条件的行再重复输出
-r 如果使用扩展正则,则需要添加-r选项,默认不支持扩展正则,只支持标准正则
-i 直接修改源文件;不加-i只会在屏幕临时输出不会修改源文件,一般测试过命令无误才会在脚本中使用-i选项
sed的编辑指令:

p 输出

命令 完整示例 说明
p sed -n ‘p‘ 1.txt 输出1.txt的所有行
2p sed -n ‘2p‘ 1.txt 输出1.txt的第二行
2,5p sed -n ‘2,5p‘ 1.txt 输出1.txt的第二行到第五行
2,+5p sed -n ‘2,+5p‘ 1.txt 输出1.txt的第二行和第二行以后的5行
1~2p sed -n ‘1~2p‘ 1.txt 输出第一行,每隔两行输出一行,也就是输出奇数行
2~2p sed -n ‘1~2p‘ 1.txt 输出第二行,每隔两行输出一行,也就是输出偶数数行
/正则/p sed -n ‘/^[0-9]/p‘ 1.txt 输出1.txt以数字开头的行
$= sed -n ‘$=‘ 1.txt 输出1.txt的行数

d 删除

命令 完整示例 说明
2d sed ‘2d‘ 1.txt 删除1.txt的第二行
2,5d sed ‘2,5d‘ 1.txt 删除1.txt的第二行到第五行
2,+5d sed ‘2,+5d‘ 1.txt 删除1.txt的第二行和第二行以后的5行
$d sed ‘$d‘ 1.txt 删除1.txt的最后一行行
/正则/ sed ‘/^[0-9]/d‘ 1.txt 删除以数字开始的行
sed ‘/^[0-9]/!d‘ 1.txt 删除不是以数字开头的行
^$ sed ‘^$‘ 1.txt 删除1.txt的空行

s 替换

命令 完整示例 说明
s/old/new/ sed ‘s/old/new/‘ 1.txt 删除1.txt中每行的第一个old都替换成new
s/old/new/2 sed ‘s/old/new/‘ 1.txt 删除1.txt中每行的第二个old都替换成new
s/old/new/g sed ‘s/old/new/g‘ 1.txt 删除1.txt中每行的每一个old都替换成new
s/old// sed ‘s/old//‘ 1.txt 删除1.txt中每行的第一个old都替换成空也就是把old删除
s/old/&s/ sed ‘s/old/&s/‘ 1.txt 删除1.txt中每行的第一个old都替换成olds &代表前面查找的字符串
4,7s/^/#/ sed ‘4,7s/^/#/‘ 1.txt 删除1.txt中4-7行开头加上# 也就是批量添加注释
4,7s/^#an/an/ sed ‘4,7s/^#an/an/‘ 1.txt 删除1.txt中4-7行以#an开头的行去掉#

替换中s///可以用其他三个相同的符号代替如s### s&&& s999 都可以 这样的符号在替换路径的时候经常用到

i/a/c插入

命令 完整示例 说明
行号 i sed ‘2i123‘ 1.txt 在1.txt的第二行前面插入123
正则 i sed ‘/^[0-9]/i123‘ 1.txt 在1.txt中所有数字开头的行前面插入123
a 在行后插入 命令格式和i相同
c 替换该行 命令格式和i相同

sed高级应用

命令 完整示例 说明
行号r sed -i ‘2r 2.txt‘ 1.txt 在1.txt中第二行后面插入2.txt的内容
行号,行号r sed -i ‘2,5r 2.txt‘ 1.txt 在1.txt中第二行到第五行每行后面插入一遍2.txt的内容
/正则/r sed -i ‘/^[0-9]/r 2.txt‘ 1.txt 在1.txt中以数字开头的行后每行面插入一遍2.txt的内容
w sed ‘2w 3.txt‘ 1.txt 在1.txt中第二行导出为3.txt的内容
w sed ‘2,5w 3.txt‘ 1.txt 在1.txt中第二行到第五行导出3.txt的内容
/正则/r sed -i ‘/^[0-9]/w 2.txt‘ 1.txt 在1.txt中以数字开头的行导出为3.txt的内容

以上是关于有没有大神帮忙解释下Sed 命令的r参数的用法,最好带例子的主要内容,如果未能解决你的问题,请参考以下文章

sed用法

Sed 的基础用法

sed基本用法

如何在Unix下使用sed命令

sed命令常见用法

用命令lsnrctl start 启动oracle监听 但出现以下错误 该怎么办 请各位大神帮帮忙 谢谢