grep for word up直到char

时间:2017-04-04 14:31:42

标签: regex linux bash grep gnu

我正在尝试grep两个字符串和下一个字,直到文件中的char。 目前的内容如下所示:

Package: wdiff\0aVersion: 1.2.2-1build1\0aArchitecture: amd64\0aMaintainer:...
...

Package: python\0aVersion: 2.7.2-1build1\0aArchitecture: amd64\0aMaintainer:..
...

等等。 我想在"\0a"之前一起grep文件中的单词“Package:”和“Versions”。 这样输出就是:

Package: wdiff Version: 1.2.2-1build1
Package: python Version: 2.7.2-1build1 

依此类推,最好使用grep。

只是为了澄清一下 - 这是一个很长的文件,其中有很多单词由“\ 0a”分隔,我只想要2个单词,然后只有“/ 0a”之后的所有单词。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

一个选项是:

awk -F\\ '{ pos=match($2,"build");print $1" "substr($2,3,pos-3) }'

我们使用awk和分隔符“\”分割文本我们想要将第二个元素从第3个字符剥离到“build”这个词所以我们使用awk中的match函数来查找字符串中的位置然后进一步将第3个字符的第二个字符串带到“build”字样的位置(减去3,以考虑字符串开头的“0a”。

答案 1 :(得分:0)

这是一个获取输出的awk命令:

awk -F '\\\\0a' 'NF>1{print $1, $2}' file

Package: wdiff Version: 1.2.2-1build1
Package: python Version: 2.7.2-1build1

-F '\\\\0a'\0a设置为输入字段分隔符。

答案 2 :(得分:-1)

  

将文件格式化为“Package:”和“Versions”   直到“\ a0”

grep 可让您查找匹配项,但不会替换“不需要的”字符。
结合 grep + sed

cat testfile | grep -Po 'Package: .+?Version: .+?(?=\\0a)' | sed 's/\(.*\)\\0a.*\(Version.*\)/\1 \2/'

示例性输出:

Package: wdiff Version: 1.2.2-1build1
Package: python Version: 2.7.2-1build1