Linux - >终端命令 - > Grep - >与符号相关的表达式/例外

时间:2015-05-30 18:03:59

标签: linux bash shell grep

简单地说:我的命令问题应该打印出包含这两个表达式中的任何一个的行:" king" " king' s儿子" 即可。这是我到目前为止的地方:

public class LoadablePO extends LoadableComponent<LoadablePO> {
    ...

    /**
     * Force a reload (by circumventing the call of isLoaded()).
     */
    public final void reload() {
        this.load();
    }

    /**
     * Load the web page.
     */
    @Override
    protected final void load() {
        driver.get(...);
    }

    ...
}

它确实有效,但它包括&#34;国王&#34; 不应该发生。

添加 grep -w "king's son\|king" frog.txt 不起作用,因为它也会删除&#34;国王的儿子&#34;

我在Virtual Box Machine上安装了Ubuntu 32位系统。

5 个答案:

答案 0 :(得分:3)

-w无济于事,因为king被视为king's中的一个字,因为'是一个非字字符。

使用:

grep -E "([[:space:]]|^)king('s son)?([[:space:]]|$)" frog.txt

如果grep有PCRE选项,则使用外观

grep -P "(?<=[[:space:]]|^)king('s son)?(?=[[:space:]]|$)" frog.txt

答案 1 :(得分:1)

grep -E "([[:space:]]|^)king('s son)?([[:space:]]|$)" frog.txt

例如,如果frog.txt包含

kingb    # no match
king's   # no match
king-bee # no match 
breaking # no match
king's hello # no match
king's sonth # no match

king     # match
a king bee  # match
king    bee # match (with a TAB)
king's son  # match

然后上面的命令返回

king     # match
a king bee  # match
king    bee # match (with a TAB)
king's son  # match

答案 2 :(得分:1)

这可以做到:

grep -E "(^|[ \t])(king|king's son)([ \t]|$)" frog.txt

它使用组(^|[ \t])([ \t]|$)来匹配单词分隔符或行的开头/结尾。

答案 3 :(得分:0)

grep -w "king's son\|king$" frog.txt

答案 4 :(得分:0)

以下行可能适用于您的情况。

grep -w "king's son\|king$\|king\ " frog.txt

结果是:

king's son   #match
king         #match
king's hello #not match