标签:空间 大括号 引号 研究 选项 读取 aaa 仓库 login
需要 \sed 高级用法
前段时间在学习shell脚本,上次有提到sed的模式空间和保持空间概念,但是一直没有研究好,这两天研究了一下,所以将它发出来,不是很全面,仅仅供大家参考一下。
保持空间sed在正常情况下,将处理的行读入模式空间,脚本中的“sed command(sed命令)”就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。
模式空间可以比喻为一个生产线,而保持空间则可以被比喻为仓库,这个比喻希望可以帮助大家理解两者的关系。
sed的指令中用来操作保持空间和模式空间的常见的有一下
为了方便,在下面用P来表示模式空间,M来表示保持空间
h:把模式空间里的内容复制到暂存缓冲区(保持空间)
H:把模式空间里的内容追加到暂存缓冲区(保持空间)
g:把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G:把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
d: 删除pattern中的所有?行,并读入下一新行到P中
D:D 删除M ,P中的第一行,不读入下一行
x:交换保持空间和模式空间的内容
在多行模式下有三个新命令:”N”,”D”和”P”。我将介绍它们与”n”,”d”和”p”单行命令的关系。
“n”命令会打印当前模式空间(除非使用了-n选项),清空当前模式空间,从输入中读取下一行。”N”命令不打印不当模式空间,也不清空模式当间,它读取下一行,并将新行的字符追加到模式空间。
“d”命令会删除当前模式空间,并读取下一行,再将新行放入模式空间,并放弃当前操作,然后开始sed的第一个命令,即开始一次新的循环。”D”命令删除模式空间中的第一部分,直到新行的字符,而保留模式空间其余的部分。它像”d”一样,放弃当前操作并开始一个新的循环,但是它不会打印当前模式空间,你在前一步打印它,如果”D”命令在一个大括号里与其它命令一起执行,在”D”之后的命令会被忽略,然后另一组sed命令会被执行,除非模式空间已经空了。如果真是这样,那么循环会重新开始。
“p”命令会打印整个模式空间,”P”命令只打印模式空间的第一部分,直接新行的字符。
标签:空间 大括号 引号 研究 选项 读取 aaa 仓库 login
原文地址:http://blog.51cto.com/amazing61/2063840