linux shell编程sed用法

aaabbbbcccccddafsddasfasfasadsfasdfaasdfdsdfasdfasdfasdfasdasdfasdfasdfadfasdfas以上为5段... aaa
bbbb

cccc
cddafsd
dasfasfas
adsfasdfa

asdfdsdfasdf

asdfasdfasd
asdfasdfasdf

adfasdfas
以上为5段文字,现在想用sed来输出指定段落(如第二段--第四段),求高手赐教!
展开
 我来答
hqxz556
2013-08-06 · TA获得超过2831个赞
知道大有可为答主
回答量:1686
采纳率:93%
帮助的人:586万
展开全部
略难。一个比较简明的方法的大概思路是:
声明一个变量计空行的数目。数到1之后,开始输出(或者换入交换空间)。数到4的时候退出程序(或者把交换空间里的内容换出来输出再退出)。

这样如果想改成输出其它段落的话,只需改数字即可。
追问
能不能帮忙写个语句呢?谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f1edbb8
2013-08-06 · TA获得超过1048个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:529万
展开全部
#!/bin/bash
#By Spinestar
dl(){
n=0
n1=1
sed '/./,/^$/!d' $path1 | while read line
do
n=$[ $n + 1 ]
if [[ $line == "" ]];then
n1=$[ $n1 + 1 ]
echo "这是第$n1段落"
else
echo "这是第$n行:"$line
fi
done
}
read -p "请输入文本路径(绝对路径)" path1
read -p "请输入首段落" dl1 
read -p "请输入尾段落" dl2
path2="`pwd $path1`/b.tmp"
dl $path1 > $path2
sed -i '1i\这是第1段落' $path2
echo "$dl1 - $dl2 段落内容如下:"
dl2=$[ $dl2 + 1 ]
sed -n "/"$dl1段落"/,/"$dl2段落"/{p}" $path2 | sed -n '$d;p'
rm $path2


只需要知道段落号就可以。


修改了下,应该没有什么问题了。

不好意思,写得比较烂。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小米飞猫
2013-08-06 · 专注于IT监控领域技术
小米飞猫
采纳数:1653 获赞数:4811

向TA提问 私信TA
展开全部
sed -n '2,4p' file
更多追问追答
追问
这个只是输出行数,不是我想要的,我要的是段落。
如第二段到第四段结果为:
cccc
cddafsd
dasfasfas
adsfasdfa

asdfdsdfasdf

asdfasdfasd
asdfasdfasdf
追答
sed -n '/cccc/,/asdfasdfasdf/p' file

看错了。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hwguan
2013-08-06 · TA获得超过1万个赞
知道大有可为答主
回答量:4405
采纳率:0%
帮助的人:4225万
展开全部
sed比较难
awk则很好解决
更多追问追答
追问
awk可以实现也行的,能不能麻烦写个语句呢?谢谢
追答
正解:

awk -vNR="" '1<NR && NR<5 {print}' myfile.txt
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式