Grep:排在第一位的是第一个字?结束?

时间:2014-01-14 22:01:42

标签: grep

我正在尝试执行一个grep命令,该命令查找文件中的所有行,其中第一个单词以“as”开头,而第一个单词也以“ng”结尾

我将如何使用grep进行此操作?

4 个答案:

答案 0 :(得分:10)

这应该就是这样做的:

$ grep '^as\w*ng\b' file

<强> Regexplanation:

^    # Matches start of the line
as   # Matches literal string as
\w   # Matches characters in word class
*    # Quantifies \w to match either zero or more
ng   # Matches literal string ng
\b   # Matches word boundary

可能错过了奇怪的角落。

如果您只想打印匹配而不是整行的字词,请使用-o选项:

$ grep -o '^as\w*ng\b' file

阅读man grep以获取有关可用选项的所有信息。

答案 1 :(得分:1)

我很确定这应该有效:

grep "^as[a-zA-Z]*ng\b" <filename>

很难说没有看到实际输入文件中的样本。

答案 2 :(得分:1)

sudo已经很好地介绍了它,但是我想再抛出一个更简单的了:

grep -i '^as[^ ]*ng\b' <file>

-i     to make grep case-insensitive
[^ ]*  matches zero or more of any character, except a space

答案 3 :(得分:0)

^找到“第一行中的第一个字符”,因此您可以使用以下内容进行搜索:

grep '^as' [file]

\w匹配单词字符,因此\w*会匹配任意数量的单词字符:

grep '^as\w*' [file]

\b表示'单词和空格之间的边界',您可以使用它来确保您匹配单词末尾的'ng'字母,而不是仅仅位于中间的某个位置:< / p>

grep '^as\w*ng\b' [file]

如果您选择省略[file],只需将文件传输到其中:

cat [file] | grep '^as\w*ng\b'

echo [some text here] | grep '^as\w*ng\b'

这就是你要找的东西吗?