网站建设费应怎样做会计分录域名在线查询
文章目录
- 1. 基本功能
- 2.sed替换s
- sed配合grep和管道操作符的例子
- 3.sed中的删除和添加
- 3.1 d删除
- 3.2 a i添加
- 添加多行
- 4.sed行替换
- 替换包含某字符的行
- 5.单字符替换 y
- 6. p打印命令
- 打印含有目标字符的行
- sed中包含多个指令,使用{}
- 7.sed w 写入文件
- 8.sed r 读取文件
- 9.sed q 退出脚本——及时终止命令执行
- 10.综合实例
- 批量指令sed指令
1. 基本功能
- 对文本中的某一行做增删改查
sed [optionsl'addrcommand[flags]' filename
//addr是指令操作的行,不写默认是全部
//command是操作指令,添加、修改等
例如:sed -e '1s/test/trial/g' data.txt
1为地址,表示操作data.txt的第一行;
s为cmd,表示替换;**命令选项**
-e:直接在vim的命令行模式上进行sed动作编辑,此为默认选项,缺省也可以。但是文件本身不被修改,只是会将执行后的结果打印;
-f:将sed的动作写在一个文件内,用-f filename执行filename内的sed动作;
-i:直接修改文件内容;
-n:只打印模式匹配的行;
-r:支持扩展表达式:**sed常用内部命令**
a 在匹配后面添加
i 在匹配前面添加
p 打印
d 删除
S 替换
c 更改
y 转换**flags**
相关描述参考下图
2.sed替换s
[address]s/pattern/replacement/flagssed指令只有-i下才会直接修改文件flag标记中的n表示将第几个目标字符做替换,如果在某一行中只有1个目标字符,则当n>1时,替换不生效。
- 如下图所示,使用p这个flag的时候必须配合-n,这样会只打印匹配上的行。通常用于原文件行数过多,只想看操作的行的时候。
- 使用w flag,可以将匹配上的行输出到一个文件,如下图所示,输出到了data1.txt
- 使用反斜线对特殊字符做转义
sed配合grep和管道操作符的例子
3.sed中的删除和添加
3.1 d删除
sed 'd' data.txt
sed d删除
-所有
sed '3d' data.txt
- 3行
sed'1,3d' data.txt
-1到3行
-sed '2,4d' data.txt
-2到4行
3.2 a i添加
sed a和i添加
sed '3i This is an inserted line.' data.txt
//在第3行前面添加sed '3a This is an appended line. data.txt
//在第3行后面添加
添加多行
sed '1i This is one line of new text.\
This is another line of new text. data.txt
4.sed行替换
sed c行替换
sed '3c This is a changed line of text.' data.txt
//无视第三行的内容,直接进行行替换,源文件没有被替换,只是打印出来替换结果了。
替换包含某字符的行
sed '/number 3/c\
> This is a changed line of text.' data.txt
- 上面将一个命令拆多行写了,下面是一行完成的。都是将含有number 3字符的行进行整行替换
5.单字符替换 y
sed y转换脚本
单个字符一对一替换
sed 'y/123/789/" data.txt
- 将123替换为789,虽然123写在了一起,但是也是按照单个字符处理的,不是按照123三个字符来理解。
- 继续添加一个l,也是一样,不论在什么位置,都会进行单个字符替换
echo "This 1 is a test of 1 try." | sed 'y/123/456/'
This 4 is a test of 4 try
6. p打印命令
sed -n '/number 3/p' data.txt
用-n选项和p命令配合使用,我们可以禁止输出其他行,只打印包含匹配文本模式的行。 如果需要在
修改之前查看行,也可以使用打印命令,比如与替换或修改命令一起使用。可以创建一个脚本在修改行之前显示该行
打印含有目标字符的行
sed中包含多个指令,使用{}
sed -n '/3/{
>p
>s/line/test/p
> }' data.txt
This is line number 3.
This is test number 3.
查找包含数字3的行,然后执行两条命令。首先,脚本用p命令来打印出原始行;然后它用s命令替换文本,并用p标记打印出替换结果。输出同时显示了原来的行文本和新的行文本
7.sed w 写入文件
sed '1,2w test.txt' data.txt
//将data.txt中的1~2行写入test.txt
//上述指令没有-n,还是会打印data.txt的内容sed -n '/demo/w demo.txt' data.txt
//将包含demo的行打印到demo.txt,-n加上就不会打印无关行了。
8.sed r 读取文件
sed '3r data1.txt' data.txt
sed 命令会将 filename 文件中的内容插入到 address 指定行的后面
sed '$r data1.txt' data.txt 插入到文件末尾
9.sed q 退出脚本——及时终止命令执行
sed '2q' test.txt
- 使用q只打印前2行
sed '/number/{s/number/num/;q}' data.txt
//包含多个命令用{},多个命令之间使用;分隔
//带q则执行完一次替换后指令就终止,不带则会针对全部行做替换
10.综合实例
sed '1...' data.txt
//直接指定行号
sed '1,3...' data.txt
//指定行的范围
sed '1,$...' data.txt
//从某行开始到最后一行
sed '/zyr/s/bash/csh/' /etc/passwd
//使用字符匹配,找到包含zyr的行做替换
//使用正则匹配做替换
sed '{s/h[0-9]/\<&\>/1; s/h[0-9]/\<&\>/2}' test.txt
//此处的&在sed语法中表示匹配上的字符本身
//{}表示对一行内容做多个操作,多个操作之间使用;分割
- 为了简化指令,可以将操作对象往前提,这样只写一次就行
其实sed的指令在vim中都可以使用命令模式直接敲然后回车执行,但是不利用批量指令。
这时就可以创建一个sed的脚本来操作目标文本!!
批量指令sed指令
创建sed.sh,将指令写入;使用-f调用指令脚本
下图为sed.sh脚本中的内容,这样可以分行写,很清晰。