文本处理-sed
Posted wooluwalker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本处理-sed相关的知识,希望对你有一定的参考价值。
vim 文本编辑器
sed awk 行编辑器
sed 的基本工作方式是:
• 将文件以行为单位读取到内存(模式空间)
• 使用sed的每个脚本对该行进行操作
• 处理完成后输出该行
sed 的替换命令 s:
# 将单行的old字符串替换成new字符串,仅替换第一次
• sed ’s/old/new/’ filename
# 多个替换命令(-e),后面可跟多个待处理的文件
• sed -e ’s/old/new/’ -e ’s/old/new/’ filename …
# 等同于上面的多个-e参数的写法
sed ‘s/a/aa/;s/b/bb/‘ filename
# 将替换后的内容写回原文件(-i)
• sed -i ’s/old/new/’ ’s/old/new/’ filename …
# 将替换的内容输出到其他文件
sed ‘s/a/aa/‘ > test-sed.txt
# 支持扩展正则表达式
• sed -r ’s/扩展正则表达式/new/’ filename
# 元字符替换
# 在/etc/passwd文件中查找带有root的行,将以root开头的内容替换为空(即 删除)
grep root /etc/passwd | sed ‘s/^root//‘
# 扩展元字符
# 将 ab abb abb... 替换成 !
sed -r ‘s/ab+/!/‘ testfile
# 将testfile中的aa或bb替换成 ! sed 通过圆括号分组
sed -r ‘s/(aa)|(bb)/!/‘ testfile
# 匹配a.*b格式的字符串后,将匹配到的字符串 输出两遍,并在其中加上:
sed -r ‘s/(a.*b)/1:1/‘ testfile
s/old/new/g
• g 为全局替换,用于替换所有出现的次数
• / 如果和正则匹配的内容冲突可以使用其他符号,如:
s@old@new@g
### 全局替换
# 标志位
s/old/new/标志位
• 数字,第几次出现才进行替换
# 仅匹配第二次出现的sbin
[root@localhost ~]# head -5 /etc/passwd | sed ‘s/sbin/!!!/2‘
• g,每次出现都进行替换
# 将出现的所有sbin 替换成 !!!
[root@localhost ~]# head -5 /etc/passwd | sed ‘s/sbin/!!!/g‘
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/!!!/nologin
daemon:x:2:2:daemon:/!!!:/!!!/nologin
adm:x:3:4:adm:/var/adm:/!!!/nologin
lp:x:4:7:lp:/var/spool/lpd:/!!!/nologin
• p 打印模式空间的内容(sed具有默认输出的,看起来被匹配到的内容被输出两次)
# 阻止sed的默认输出,只输出替换成功的行 -n 参数控制
• sed -n ‘script’ filename
• w file 将模式空间的内容写入到文件
[root@localhost ~]# head -5 /etc/passwd | sed -n ‘s/root/ROOT/w /tmp/sed-test.txt‘
[root@localhost ~]# cat /tmp/sed-test.txt
ROOT:x:0:0:root:/root:/bin/bash
以上是关于文本处理-sed的主要内容,如果未能解决你的问题,请参考以下文章