bash中,我想匹配文件的某行,匹配到该行以后,将该行和下面的几行输出到另外一个文件,怎么实现? 10

cat$1|whilereadlinedoecho$line|grep"EXEC"if[$?-eq0];thenecho$line>>2fidone比如该行没有分号,该行... cat $1 |while read line
do
echo $line|grep "EXEC"

if [ $? -eq 0 ] ;then
echo $line >>2

fi

done
比如该行没有分号,该行下面的第四行有分号。我想输出这五行到另一个文件。下面的4行怎么也输出到文件2中?
展开
 我来答
百度网友5311d79
2014-06-11 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3222万
展开全部

用sed循环匹配输出比较简便,一行代码搞定。

sed -n '/EXEC/{:a;p;/;/q;n;ba}' $1 >2

稍作说明:

-n         禁止自动打印,只有通过命令p打印。

/EXEC/ 匹配含有EXEC的行。

:a         设置跳转标签a

/;/q       匹配含有分号的行,匹配到了通过命令q退出sed,不再继续向下处理文件。

n          读取下一行

ba        跳转到标签a处向后执行,跟:a组合使用构成循环语句。

 

用你的方法也可以做:

isFound=0
cat $1 | while read line
do
    if [ $isFound -eq 0 ]; then
        echo "$line" | grep "EXEC" >/dev/null 2>&1
        if [ $? -eq 0 ]; then
            isFound=1
            echo "$line" >>2
        fi
    else
        echo "$line" >>2
        echo "$line" | grep ";" >/dev/null 2>&1
        [ $? -eq 0 ] && break
    fi
done
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式