如何在正则表达式后打印单词但不是类似的单词?

时间:2010-09-08 21:42:35

标签: sed awk duplicates

我想要一个awk或sed命令在regexp之后打印这个单词。

我想在WORD之后找到WORD而不是看起来相似的WORD。

该文件如下所示:

 somethingsomething
 X-Windows-Icon=xournal
 somethingsomething
 Icon=xournal
 somethingsomething
 somethingsomething 

我希望“xournal”来自一个说“Icon = xournal”的人。这是我到现在为止的进展。我也尝试了一个AWK字符串但它也没有成功。

cat "${file}" | grep 'Icon=' | sed 's/.*Icon=//' >> /tmp/text.txt

但我得到了两个,所以文本文件给出了两个我不想要的xournal。

3 个答案:

答案 0 :(得分:4)

使用^将模式锚定在行的开头。你甚至可以直接在sed中进行grepping:

sed -n '/^Icon=/ { s/.*=//; p; }' "$file" >> /tmp/text.txt

你也可以使用awk,我觉得它看起来好一些。使用=作为字段分隔符,如果字段1为Icon,则打印字段2:

awk -F= '$1=="Icon" {print $2}' "$file" >> /tmp/text.txt

答案 1 :(得分:0)

即使Perl不是其中一个标记,这可能也很有用。 如果您对Perl感兴趣,这个小程序将为您完成任务:

#!/usr/bin/perl -w

while(<>)
{
    if(/Icon\=/i)
    {
        print $';
    }
}

这是输出:

C:\Documents and Settings\Administrator>io.pl new2.txt
xournal
xournal

说明:

  • while (<>)在执行时从命令行中作为参数提供的文件中获取输入数据。
  • (/Icon\=/i)if条件中使用的正则表达式。
  • $'将在正则表达式后打印部分行。

答案 2 :(得分:0)

您只需要:

sed -n 's/^Icon=//p' file