我想在文本文件中搜索格式为"\d+ [xyz]{3} \d+"
的三行,并使用sed在一行中输出这些行。
示例输入:
...
33 xxx 7
...
33 zzz 3
...
33 yyy 5
...
输出:
33 7 3 5
答案 0 :(得分:2)
sed
的一种方式:
script.sed
的内容:
## Subbtitute line that matches the format with both numbers.
s/^\([0-9]\+\) [xyz]\{3\} \([0-9]\+\)$/\1 \2/
## If substitution succeed, go to label 'a'.
ta
## If substitution failed, go to label 'b'.
bb
## Save content to 'hold space'.
:a
H
## In last line, get content from 'hold space', remove numbers
## not needed in output and print.
:b
$ {
g
s/^\n//
s/\n[0-9]\+//g
p
}
infile
的内容:
text
33 xxx 7
more text
33 zzz 3
55 n
33 yyy 5
66 asf sdf
运行脚本:
sed -nf script.sed infile
输出:
33 7 3 5
答案 1 :(得分:2)
使用awk
:
script.awk
的内容:
$1 ~ /^[[:digit:]]+$/ && $2 ~ /^[xyz]{3}$/ && $3 ~ /^[[:digit:]]+$/ {
num = $1
digits = digits " " $3
}
END {
print num digits
}
infile
的内容:
text
33 xxx 7
more text
33 zzz 3
55 n
33 yyy 5
66 asf sdf
运行脚本:
awk -f script.awk infile
输出:
33 7 3 5
答案 2 :(得分:1)
这可能对您有用:
sed '/^\([0-9]\+ \)[xyz]\{3\} \([0-9]\+\)/{s//\1\2/;H};$!d;g;s/.//;s/\n[0-9]*//g' file
33 7 3 5