linux shell编程sed用法

aaa
bbbb

cccc
cddafsd
dasfasfas
adsfasdfa

asdfdsdfasdf

asdfasdfasd
asdfasdfasdf

adfasdfas
以上为5段文字,现在想用sed来输出指定段落(如第二段--第四段),求高手赐教!

第1个回答  2013-08-06
略难。一个比较简明的方法的大概思路是:
声明一个变量计空行的数目。数到1之后,开始输出(或者换入交换空间)。数到4的时候退出程序(或者把交换空间里的内容换出来输出再退出)。

这样如果想改成输出其它段落的话,只需改数字即可。追问

能不能帮忙写个语句呢?谢谢

第2个回答  2013-08-06
#!/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


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


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

不好意思,写得比较烂。

第3个回答  2013-08-06
sed -n '2,4p' file

追问

这个只是输出行数,不是我想要的,我要的是段落。
如第二段到第四段结果为:
cccc
cddafsd
dasfasfas
adsfasdfa

asdfdsdfasdf

asdfasdfasd
asdfasdfasdf

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

看错了。

追问

谢谢,不过这个是在知道内容的情况下,我希望是在不知道内容的情况下输出某些段落

追答

匹配截取,首先你要知道文本内容。
根据文本的内容考虑截取的方式和截取点,寻找要截取内容所要匹配的规律。
在一无所知的情况下,你不考虑文本环境是没办法截取。

追问

每一个段落都会以“abc 数字"开始,以感叹号结束,但一个段落的行数不定

追答

你这个需求如果我写,我只能写脚本了。
可以先按照abc 数字 到 感叹号 匹配内容。整理出一个一个以上述规则切割的小文件
写个while循环导出一个段落内容,删除一个段落内容。这样可以通过正则去循环匹配。
别的方法我想不到。非要一条搞定,还是等高手吧。

第4个回答  2013-08-06
sed比较难
awk则很好解决追问

awk可以实现也行的,能不能麻烦写个语句呢?谢谢

追答

正解:

awk -vNR="" '1<NR && NR<5 {print}' myfile.txt

追问

你好,这个试了只能输出行数啊,我是希望能输出段落

追答

我试了可以的啊
NR=""是以空行做分隔
1<NR, NR<5 就是第2到第4个记录

awk -vNR="" '1<NR && NR<5 {print $0,"\n" }' myfile.txt
把空行也带上

追问

你可能打错了,应该是-vRS

追答

啊,是的是的光顾着复制了...

本回答被提问者采纳

Linux命令行与Shell脚本编程大全——19 sed基础
1. 替换选项:替换命令默认只替换每行的第一个匹配文本,但通过添加替换标记可以改变这一行为。有四种标记:数字指定替换第几处匹配,g替换所有匹配,p打印匹配行,w写入文件。例如,使用数字2替换每行的第二次匹配。2. 替换字符:遇到复杂字符,如正斜线,替换时需转义。sed允许选择其他字符作为替换分隔...

shell常用命令之sed命令
sed命令是Linux中强大的文本处理工具,它主要用于在文件中替换、删除或打印指定的文本。命令的基本格式为"sed -i 's\/旧字符串\/新字符串\/g' 文件名"。这里的-i参数表示修改文件内容,g参数表示全局替换,若不使用g,则只替换每行首次出现的字符串。sed还提供了删除指定行的功能,格式为"sed ‘开始...

Linux下的shell编程 如何替换文件中的内容
方法1:sed -i 's\/被替换的内容\/要替换成的内容\/' file 方法2:sed 's\/被替换的内容\/要替换成的内容\/g' file > file.out;mv file.out file。

linux shell编程sed用法
声明一个变量计空行的数目。数到1之后,开始输出(或者换入交换空间)。数到4的时候退出程序(或者把交换空间里的内容换出来输出再退出)。这样如果想改成输出其它段落的话,只需改数字即可。

linux shell sed 的用法
"uid=100(guest)gid=100(others)groups=10(users),11(floppy)"|sed 's\/^[^(]*(\\([^)]*\\).*\/\\1\/'输出 guest [^(]表示不是(^[^(]*表示不是(开头的一串,*跟在后面表示一个或者连续几个不已(开头的字符 (表示guest左边的(\\([^)]*\\)表示不以)结束的一串字符,匹配后面\\1输出 ...

谁能帮忙解释下linux shell程序中的sed "s\/$\/\/;s\/ *\/\/g;\/^$\/d" 这...
意思是删除空行,空行包括没有任何字符的空行,和只有若干个空格的空行。1、s\/$\/\/ 在每一行后面追加空。2、s为搜索。如:s\/a\/b\/ 搜索a将替换为b ,并只替换一次。3、s\/ *\/\/g 将空格删除。4、g代表搜索到的全部替换 。5、“空格星”( " *") 代理多个空格。6、\/^$\/d 删除空行。

linux shell中 sed 文件的1到7行行首有指定字符串的整行替换为为指定...
sed '1,7s\/^字符串.*\/替换内容\/' file 不要随便加 -i 参数。先确定好在加。

linux。。shell脚本。。sed '2i$NUM' 。。怎么让变量能翻译
用单引号把$NUM隔开 NUM=123;sed '2i'$NUM'' file 或者直接用双引号:NUM=123;sed "2i$NUM" file

shell中文件字符串替换
在Shell中,可以使用`sed`命令进行文件字符串替换。具体语法为:`sed -i 's\/原字符串\/新字符串\/g' 文件名`。详细解释:1. sed命令简介 `sed`是一个流编辑器,用于对文本文件进行非交互式处理。它可以对文件内容进行搜索、替换、删除、插入等操作。2. 字符串替换语法 `sed`命令中的替换语法是:...

linux shell sed 文件中的某几行到另一个文件的最后一行
将文件中的某几行取出来,放到另一个文件的最后?这个意思吗?sed -n '2,5p' file1 >>file2 将file1的2~5行取出来附加到file2后面

相似回答
大家正在搜