我有一个像这样的文件
pin
port
coord
some info
some more info
pin
port
coord
some info
some more info
我想grep" pin
"和" some info
"进入文件
我试过grep -A 3 pin input.txt | sed -n '4~5p'
这只会给我" someinfo
"线。
我希望我的输出为
pin
some info
pin
some info
awk,sed等中的任何建议。!!!
答案 0 :(得分:3)
$ awk '/pin/{print; n=0} ++n==4{print $0 ORS}' file
pin
some info
pin
some info
或者如果输出记录之间不需要空行:
$ awk '/pin/{print;n=0} ++n==4' file
pin
some info
pin
some info
$ awk '/pin/{n=0} ++n~/^[14]$/' file
pin
some info
pin
some info
答案 1 :(得分:0)
例如,您可以选择每一行4k
和4k+1
:
$ grep -A 3 --no-group-separator "pin" file | awk 'NR%4<=1'
pin
some info
pin
some info
请注意--no-group-separator
的重要性:
$ grep -A 3 --no-group-separator "pin" file
pin
port
coord
some info
pin # no "--" between matches
port
coord
some info
可是:
$ grep -A 3 "pin" file
pin
port
coord
some info
--
pin
port
coord
some info
答案 2 :(得分:0)
perl -lne 'print if /pin|some info/;' in.txt > out.txt
答案 3 :(得分:0)
awk 'n==5 {print; n=0} /pin/ {print; n=1} n{n++}' pin.in
答案 4 :(得分:0)
如果您实际上正在寻找名为&#34;某些信息&#34;
的行,这两项都应该有效 1)sed -n -e 's/pin/&/p' -e 's/some info/&/p' input.txt
默认情况下,-n
表示不打印该行
-e
允许多次搜索
&
是对前两个/
之间匹配的引用
p
表示打印最后两个/
之间的内容
因此,它一起搜索input.txt
pin
和some info
并仅打印包含它们的行
2)awk '/pin/ {print} /some info/ {print}'
这样做也是如此;它搜索pin
和some info
并仅打印这些行
这两个命令的输出是:
pin
some info
pin
some info
如果第一个some info
和第二个pin
之间的空行是绝对必要的,我可以尝试找出插入它的方法(可能使用sed
)
编辑:
我意识到您实际上可以使用sed -n -e '/pin/p' -e '/some info/p' input.txt
而不是上面的sed
命令(没有s
标志而没有&
)。这种方式更短,更易读。
答案 5 :(得分:0)
试试这个:
perl -00 -nlE 'say map {"$_\n"} (split /\n/, $_)[0,3]' < filename
用于下一个输入:
pin
port
coord
some info
some more info
bla
port2
coord2
bla some info2
some more info2
打印
pin
some info
bla
bla some info2