Sed 如何在正则表达式之后打印word,但不打印类似的word?

Sed 如何在正则表达式之后打印word,但不打印类似的word?,sed,awk,duplicates,Sed,Awk,Duplicates,我需要一个awk或sed命令来打印regexp后面的单词 我想在一个词后找到这个词,但不想在看起来相似的词后找到 该文件如下所示: somethingsomething X-Windows-Icon=xournal somethingsomething Icon=xournal somethingsomething somethingsomething 我想从那个写着“Icon=xournal”的单词中选择“xournal”。这就是我到现在为止所取得的成就。我也尝试过AWK字符串

我需要一个awk或sed命令来打印regexp后面的单词

我想在一个词后找到这个词,但不想在看起来相似的词后找到

该文件如下所示:

 somethingsomething
 X-Windows-Icon=xournal
 somethingsomething
 Icon=xournal
 somethingsomething
 somethingsomething 
我想从那个写着“Icon=xournal”的单词中选择“xournal”。这就是我到现在为止所取得的成就。我也尝试过AWK字符串,但也不成功

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

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

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

sed -n '/^Icon=/ { s/.*=//; p; }' "$file" >> /tmp/text.txt
你也可以用awk,我觉得读起来更好一些。使用
=
作为字段分隔符,如果字段1是
图标
,则打印字段2:

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

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

#!/usr/bin/perl -w

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

  • while()
    在执行时从命令行上作为参数给定的文件中获取输入数据
  • (/Icon\=/i)
    是在
    if
    条件中使用的正则表达式
  • $”
    将打印正则表达式后面的行部分
您只需要:

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