我正在尝试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”之后的所有单词。
感谢您的帮助!
答案 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