理解sed / awk ^和[]

时间:2014-01-26 01:54:58

标签: regex bash sed awk

首先,是否有更好的命令行Linux方式处理从wget下载的HTML页面中的文本,而不是使用sed和awk?如果是这样,请告诉我或链接到doc。

其次,我对以下表达式感到困惑...因为^从新行的开头搜索,为什么空白gsub(/[^a-z]]*/, " ")会替换非字母字符,逗号,在这里做了什么?为什么这个表达式中有一个无与伦比的]

1 个答案:

答案 0 :(得分:4)

对于HTML的处理,您需要描述您想要处理的内容。

^字符不在字符类中并且可以指示行的开头时(例如,如果正则表达式是/^[^a-z]/),则[]字符用作“行首”。当它在一个字符类(括在方括号gsub中)并且是第一个字符时,它是一个元字符,意思是“除了以下字符之外的任何东西”。

gsub(/[^a-z]]*/, " ") 函数是全局搜索和替换操作:

" "

表示'替换不在a-z中的任何内容,后跟零或更多的方括号,并带有空格(双引号gsub中的字符串)。逗号是一个参数分隔符,将正则表达式参数与替换字符串参数分开。正则表达式中的第二个紧密方括号令人惊讶;这很容易就是一个错误。

因为$0函数没有第三个参数,所以它在当前输入行{{1}}上运行。