sed命令使用
2014-03-18 10:40
281 查看
#将文件中的英文双引号替换成英文单引号
sed 's/"'"/'"'/g' test.txt
s/+双引号+单引号+双引号+/+单引号+双引号+单引号+/g
或者
sed s#\"#\'#g test.txt
#文件中存储数据的格式是key:value,现在交换变成value:key。
sed 's/\(.*\):\(.*\)/\2:\1/' input
#将文件中的所有大写字母转换成小写字母
sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' input
#在文件中查找包含字符串pattern的行并打印,-n表示不打印输入文件的所有行,编辑命令p表示打印匹配行。
sed -n '/pattern/p' a.txt
#只打印第一行
sed -n '1p' a.txt
#打印第3~6行
sed -n '3,6p' a.txt
#将当前文件加下所有文件中的-m486替换成-mtune=i486
sed -i"s/-m486/-mtune=i486/g" `grep "\-m486" -rl .`
#在文件结尾添加文本
sed '$a\
End of file' input
#删除以.H1开头的行的下一行的空行,sedscript内容如下:
#打印文件的前100行
sed '100q' input
#将文件中的多个空行变成一个
sed '/^$/{
N
/^\n$/D
}' input
#在文件中查找字符串,字符串可能跨两行
注意使用变量的方式,变量两边用双引号,被Shell解释,然后再用单引号。
/'"$search"'/b在当前行匹配模式,如果匹配成功,b命令跳转到命令结尾,即输出当前行并进入下一个循环;
如果匹配失败,则执行$!N,即除了最后一行以外,读取下一行,追加到模式缓冲区中。
h将模式缓冲区中的内容拷贝到保持缓冲区中,
s/.*\n//将模式缓冲区中的第一行删除,然后/'"$search"'/b在剩下的内容,即原来的第二行中进行匹配,如果匹配成功,则直接输出并进入下一个循环;
如果匹配失败,向下执行,g将保持缓冲区内如拷贝到模式缓冲区,然后s/ *\n/ /将将第一行结尾的空格和换行符删除后,/'"$search"'/继续匹配,
如果匹配成功,g将保持缓冲区内如拷贝到模式缓冲区,b到命令结尾则输出模式缓冲区的内容后,进入下一个循环。
如果匹配失败,则g将保持缓冲区内如拷贝到模式缓冲区,然后用D删除模式缓冲区中的第一行,如果模式缓冲区中不为空,则从头开始执行。
sed 's/"'"/'"'/g' test.txt
s/+双引号+单引号+双引号+/+单引号+双引号+单引号+/g
或者
sed s#\"#\'#g test.txt
#文件中存储数据的格式是key:value,现在交换变成value:key。
sed 's/\(.*\):\(.*\)/\2:\1/' input
#将文件中的所有大写字母转换成小写字母
sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' input
#在文件中查找包含字符串pattern的行并打印,-n表示不打印输入文件的所有行,编辑命令p表示打印匹配行。
sed -n '/pattern/p' a.txt
#只打印第一行
sed -n '1p' a.txt
#打印第3~6行
sed -n '3,6p' a.txt
#将当前文件加下所有文件中的-m486替换成-mtune=i486
sed -i"s/-m486/-mtune=i486/g" `grep "\-m486" -rl .`
#在文件结尾添加文本
sed '$a\
End of file' input
#删除以.H1开头的行的下一行的空行,sedscript内容如下:
/^\.H1/{ n /^$/d }sed -f sedscript input
#打印文件的前100行
sed '100q' input
#将文件中的多个空行变成一个
sed '/^$/{
N
/^\n$/D
}' input
#在文件中查找字符串,字符串可能跨两行
#!/bin/sh #phrase -- search for words across lines # $1 = search string; remaining args = filnames search=$1 shift for file do sed ' /'"$search"'/b $!N h s/.*\n// /'"$search"'/b g s/ *\n/ / /'"$search"'/{ g b } g D' $file done
注意使用变量的方式,变量两边用双引号,被Shell解释,然后再用单引号。
/'"$search"'/b在当前行匹配模式,如果匹配成功,b命令跳转到命令结尾,即输出当前行并进入下一个循环;
如果匹配失败,则执行$!N,即除了最后一行以外,读取下一行,追加到模式缓冲区中。
h将模式缓冲区中的内容拷贝到保持缓冲区中,
s/.*\n//将模式缓冲区中的第一行删除,然后/'"$search"'/b在剩下的内容,即原来的第二行中进行匹配,如果匹配成功,则直接输出并进入下一个循环;
如果匹配失败,向下执行,g将保持缓冲区内如拷贝到模式缓冲区,然后s/ *\n/ /将将第一行结尾的空格和换行符删除后,/'"$search"'/继续匹配,
如果匹配成功,g将保持缓冲区内如拷贝到模式缓冲区,b到命令结尾则输出模式缓冲区的内容后,进入下一个循环。
如果匹配失败,则g将保持缓冲区内如拷贝到模式缓冲区,然后用D删除模式缓冲区中的第一行,如果模式缓冲区中不为空,则从头开始执行。
相关文章推荐
- Linux下使用sed编辑器详解
- sed或awk处理文件最后一行的实现方法
- 查看某时间段到现在的系统日志的sed命令
- SED单行脚本快速参考(流编辑器)第1/2页
- sed找到关键字所在行并将其前面的第一个字符删除的命令
- sed初学者实用说明
- sed模式空间和暂存空间的区别
- grep,awk,sed实例
- Linux sed命令基础解释
- linux sed用法
- sed详解+实例
- sed实用——文本转换
- sed高级应用——反转行
- 打印文件内容和行号
- linux之sed用法
- linux sed命令详解
- Vim实现批量注释的方法
- sed命令n,N,d,D,p,P,h,H,g,G,x解析
- SED单行脚本快速参考
- sed 单行操作快速参考