Unix Sed从最后一次出现的给定单词中获取行

时间:2010-10-08 06:49:01

标签: unix shell sed

我想从包含给定单词最后一次出现的行的文件中获取行。

例如:

  

是的,有一些   情节的变化。在原文中,
   凯恩试图买高政治   办公室为自己。在新版本中,
  他只是把政治家放在他的工资单上。

如果我给“In”,那么我需要

  办公室为自己。在新版本中,
  他只是把政治家放在他的工资单上。

4 个答案:

答案 0 :(得分:1)

尝试:

grep 'yourWord' yourFile.txt | tail -n1

或者使用sed:

sed -n '/yourWord/{$p}' yourFile.txt

答案 1 :(得分:0)

$ word="In"
$ awk -vw="$word" '{s=s$0}END{ m=split(s,str,w); print w str[m]}' file
In the new version, he just puts politicians on his payroll.

我不明白为什么有“办公室为自己”。虽然。

答案 2 :(得分:0)

这应该有效:

作为一个单行:

patt=In
sed -nr "/$patt/!b;:a;\$!N;/\n.*$patt/{h;s/\n[^\n]*\$//;g;s/^.*\n//};\$!ba;p" inputfile

如果您的sed需要-e

patt=In
sed -nr -e "/$patt/!b" -e ":a" -e "\$!N" -e "/\n.*$patt/{h" -e "s/\n[^\n]*\$//" -e "g" -e "s/^.*\n//}" -e "\$!ba" -e "p" inputfile

在不同的行上:

patt=In
sed -nr "
    /$patt/!b
    :a
    \$!N
    /\n.*$patt/{
    h
    s/\n[^\n]*\$//
    g
    s/^.*\n//
    }
    \$!ba
    p' inputfile

答案 3 :(得分:0)

我只能打印第4行和行尾

我的命令是

sed -n'4,$ p'file