我有以下文件:
$cat somefile
Line1 T:10 Hello
Var1 = value1
Var2 = value2
Line2 T:2 Where
VarX1 = ValueX1
VarX2 = ValueX2
Line3 T:10 AAAA
Var10 = Val1
Var11 = Val11
Line4 T:10 ABCC
Var101 = Val110
... 我需要的是通过给出搜索条件,它应该得到多行。 例如,如果搜索条件是 - T:10 - 那么它应该给出
Line1 T:10 Hello
Var1 = value1
Var2 = value2
Line3 T:10 AAAA
Var10 = Val1
Var11 = Val11
我尝试了sed命令
sed -ne '/T:10/,/^$/p' somefile
但这不能正常工作,有时也会得到其他线路。 我在这里做错了什么吗?
答案 0 :(得分:1)
这是一个“段落”grep。 Linux / GNU grep没有段落模式,我没有在sed中完成它,但你可以使用perl。
perl -00 -ne 'print if /T:10/' somefile
答案 1 :(得分:0)
这是一个bash
解决方案
#!/bin/bash
data=$(<file)
search="T:10"
OLDIFS="$IFS"
IFS="|"
data=(${data//$'\n\n'/|})
for i in "${!data[@]}"
do
case "${data[$i]}" in
*"${search}"* ) echo "$i : ${data[$i]}" ;;
esac
done
IFS="$OLDIFS"
答案 2 :(得分:0)
这可能对您有用(GNU sed):
sed -n '/T:10/{:a;N;/^$/M!ba;p}' file
使用-n
选项关闭自动打印。聚集T:10
和空行之间的行,否则打印不行。