sed - 删除匹配模式以外的所有行

时间:2016-10-28 16:53:38

标签: regex sed

我正在努力解析文件中的主题标签。例如:

#Foo

我希望输出为:

GroupChat chat = new GroupChat();

#之前和之后的文本可以更改,我试图将其应用于文件的多行。每行都会有一个#,因为我已经为了标签而填写了文件。

基本上我试图创建一个包含在文件中的主题标签列表。如果还有一种方法可以从结果输出中删除重复的标签,这将是一个奖励。

2 个答案:

答案 0 :(得分:2)

使用GNU grep:

grep -o '#[^ ]*' file

答案 1 :(得分:1)

使用sed

sed -E 's/^[^#]*(#[^[:blank:]]*).*/\1/'
  • ^[^#]*匹配第一个#

  • 之前的部分
  • (#[^[:blank:]]*)匹配#后跟任意数量的非空格/制表符,并将匹配项置于捕获的组1中

  • .*与其他

  • 相匹配
  • 在替换中,使用了捕获的组\1

示例:

% sed -E 's/^[^#]*(#[^[:blank:]]*).*/\1/' <<<'Some text here #Foo Some other text here'
#Foo