grep for word 直到 char

grep for word up until char

我正在尝试 grep 两个字符串和下一个单词,直到文件中的一个字符。 当前内容看起来像这样:

Package: wdiff[=10=]aVersion: 1.2.2-1build1[=10=]aArchitecture: amd64[=10=]aMaintainer:...
...

Package: python[=10=]aVersion: 2.7.2-1build1[=10=]aArchitecture: amd64[=10=]aMaintainer:..
...

等等。 我想 grep 文件中的单词 "Package:" 和 "Versions" 直到 "[=12=]a"。 这样输出将是:

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

等等,最好使用grep。

澄清一下 - 这是一个很长的文件,有很多单词由“\0a”分隔,我只想要 2 个单词和它们之后的所有内容,直到“\0a”。

感谢您的帮助!

to grep the file for the words "Package:" and "Versions" together up until "\a0"

grep 允许您查找匹配项,但它不会替换 "unneeded" 个字符。
使用 grep + sed:[=13 的组合=]

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

示例输出:

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

一个选项是:

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

我们使用 awk 和分隔符“\”拆分文本 我们想从第 3 个字符进一步剥离第二个元素到单词 "build" 所以我们使用 awk 中的 match 函数来查找 where is in字符串,然后进一步取第二个字符串,从第 3 个字符到出现单词 "build" 的位置(减去 3 以考虑字符串开头的“0a”。

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

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

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

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