Sed 如何在正则表达式之后打印word,但不打印类似的word?
我需要一个awk或sed命令来打印regexp后面的单词 我想在一个词后找到这个词,但不想在看起来相似的词后找到 该文件如下所示: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字符串
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