我有一个如下所示的文件:
Heading -
- Completed foo
- More information
- Still more
* Need to complete bar
- Did baz (comment blah blah) ***
Another -
* Need to complete foo
- Completed bar (blah comment blah) ***
- Done baz
我需要运行文本文件sed
以删除所有以空格(数字不同)和连字符以及另一个空格开头的行。
我需要使用什么正则表达式或模式sed
才能使输出看起来像下面这样?
Heading -
* Need to complete bar
Another -
* Need to complete foo
答案1
答案2
"s/\s*-\s.*//g"
我认为应该这么做。
其中 \s 匹配空格,* 匹配零个或多个前导字符(空格),一个文字连字符,然后是另一个空格,然后 .+ 匹配其后的所有内容。
答案3
您应该使用 egrep 或 grep 来完成这项任务,sed 是一个流编辑器,grep 更符合一次一行的理念。
你需要一个匹配行首、空格、连字符、空格的正则表达式。听起来这行得通:
egrep -v '^[ ]+-[ ]' filename
该-v
选项使 egrep 删除匹配的行——这比构建拒绝行的正则表达式更容易。
例子:
nobody$ egrep -v '^[ ]+-[ ]' /tmp/foof
Heading -
* Need to complete bar
Another -
* Need to complete foo
nobody$ cat /tmp/foof
Heading -
- Completed foo
- More information
- Still more
* Need to complete bar
- Did baz (comment blah blah) ***
Another -
* Need to complete foo
- Completed bar (blah comment blah) ***
- Done baz
nobody$ _
处理制表符仅意味着您需要在括号表达式中使用它们,但这很难在线显示。
答案4
要从输出中过滤整行,通常需要grep
,而不是sed
。 特别是,要排除特定行,您需要使用grep -v 'exclusion-regex'
。