需要了解这个sed表达式

时间:2013-01-18 03:27:25

标签: linux sed

我正在阅读这些问题How to use conditional expression to select data?

给出的sed解决方案是

sed -r '1d;/(\S+\s+){5}\S+/!d;/\+$/s/\S+\s+//5;/-$/s/\S+\s+//4' file

我无法理解这些位

1d; - 这个statmenet做了什么

/(\S+\s+){5}\S+/ - 它匹配任何非空白chnacter 5次和一次

!d不知道这是做什么的

/\+$/这意味着任何以+

结尾的内容

s/\S+\s+//5;不知道

/-$/它搜索以 -

结尾的任何内容

s/\S+\s+//4'不知道

1 个答案:

答案 0 :(得分:0)

1d;

这只是删除第一行。

/(\S+\s+){5}\S+/!d;

这匹配任何(非空白字符[\S]一次或多次[+]后跟任何空白字符[\s]一次或多次[+])5次[{5}],然后是一个非空白字符[\S]一次或多次[+],并且删除不包含匹配的任何行的整行[{{{ 1}}]。

语法!d将搜索您的模式并删除包含该模式的所有行。将其更改为/pattern/d则相反,因为它会删除任何不包含该匹配项的行。

/pattern/!d

这将搜索模式/\+$/s/\S+\s+//5;,该模式匹配以文字加号结尾的任何行。然后它会对这些行执行操作\+$。这个命令的作用是搜索模式s/\S+\s+//5(你应该能够根据最后一个语句的解释来解释),并删除每行上第五次匹配(不是整行,请注意,只是匹配位。)

这里的基本语法是\S+\s+。因为替换是空白的,所以它具有删除匹配的效果。将语法更改为s/pattern/replacement/仅替换第n次出现。

s/pattern/replacement/n

这几乎与上面相同,只是它搜索以减号结尾的行,然后在这些行上删除第四次出现的模式。

HTH。