使用BASH中的sed打印所有以“@”开头的单词

时间:2015-07-02 17:00:28

标签: sed grep match

我有一个包含大量文字的文件,但我想在开头只打印包含“@”的单词。例如:

My name is @Laura and I live in @London. Name=@Laura. City=@London

如何打印以@?开头的所有单词。我这样做了以下并且它有效,但我想用sed来做。我尝试了几个图案,但我不能打印任何东西。

grep -o -E "@\w+" file.txt

由于

1 个答案:

答案 0 :(得分:2)

使用此命令:

sed 's/[^@]*\(@[^ .]*\)/\1\n/g' file.txt

说明:我们调用sed的替换命令。这具有以下结构:sed 's/regex/replace/options'。我们将搜索正则表达式并使用g选项替换它。 g确保每行匹配多次。

我们会查找一系列非字符,后跟一个@和一些非空格@[^ ]*。我们将此最后一部分放在一个组\(\)中,并在替换\1期间将其归档。

请注意,我们会在每次匹配结束时添加换行符,您也可以通过省略\n来获取单行上的输出。