我正在阅读这些问题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'
不知道
答案 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。