2016-10-28 121 views
1

我正在尝试解析文件中的#标签。例如:sed - 删除除匹配模式以外的所有行

Some text here #Foo Some other text here.... 

我想输出是:

#Foo 

文本前后#能改变的,我想这个应用到文件的多条线。每一行都会有一个#,因为我已经为该文件标记了hashtags。

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

+0

有什么理由不能使用例如'grep -o -E'#\ S +'myf ile.txt' –

+0

哈哈!我只是在试验这个!我猜这不起作用的主要原因是我想更改文件,但我没有提到在最初的问题中,我实际上可能能够解决该问题。 – Atari911

回答

1

sed随着:

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

  • (#[^[:blank:]]*)的部分匹配匹配后跟任意麻木#的非空间/制表符,和ER把比赛中捕获组1

  • .*匹配其余

  • 在更换,所捕获的组\1用于

实施例:

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

这个答案与'grep'命令的答案完全相同,但是使用'sed'来完成工作,所以我将其标记为答案。 – Atari911

2

随着GNU的grep:

grep -o '#[^ ]*' file 
+0

使用'grep'竖起大拇指,因为这看起来更像是完成这件事的正确方法。 – Atari911