shell语言编程中如何删除匹配行的后一行和匹配行的前一行,但是匹配行不需要删除,

$sed /Sysadmin/d thegeekstuff.txt这句是匹配行删除了,$sed '/Storage/,+1d' thegeekstuff.txt这句是匹配行以及之后的一行删除了,我需要的是匹配行不用删除,而是删除匹配行之后的一行和匹配行之前的一行?

删除匹配行的下一行比较好实现:

sed -ne 'p;/Storage/n' thegeekstuff.txt

 删除匹配行的前一行,可以将文本文件倒过来,从而将问题转成删除匹配行的下一行

tac thegeekstuff.txt|sed -ne 'p;/Storage/n' |tac

写成一句

sed -ne 'p;/Storage/n' thegeekstuff.txt|tac|sed -ne 'p;/Storage/n' |tac

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-09
1,
#cat t1
a
b
c
d
#sed –nr ‘/a/{n;N;N;p}’ t1
b
c
d
#sed –nr ‘/a/{n;n;n;p}’ t1
d
n是匹配下一行,N是匹配当前行和下一行,分别用于打印一个范围或者指定距离的行。
2,
sed –n ‘/G/{x;p};h’ file
意思是匹配字符G上一行的内容。

追问

能讲下知识点么?在哪本书中可以看到?

shell语言编程中如何删除匹配行的后一行和匹配行的前一行,但是匹配行不...
删除匹配行的下一行比较好实现:sed -ne 'p;\/Storage\/n' thegeekstuff.txt 删除匹配行的前一行,可以将文本文件倒过来,从而将问题转成删除匹配行的下一行 tac thegeekstuff.txt|sed -ne 'p;\/Storage\/n' |tac写成一句 sed -ne 'p;\/Storage\/n' thegeekstuff.txt|tac|sed -ne 'p;\/Storage...

怎样用shell语言去掉指定列值的行。
print;} ' dat 他的意思是 如果某行的第2字段不匹配gm* 那么就输出这一行。

shell 文本文件处理 删除每行前两个字符
其中,A为正则表达式,^ 匹配行首位置,点号 . 匹配任意一个字符。这里即将行首的前两个字符替换为空。

shell sed命令删除指定行,匹配字符用变量替代,变量包含"\/"和" "
改成这样就可以了:A="\\\/usr\\\/sbin\\\/control.sh --start"sed -i "\/$A\/d" cmd.cfg

Sed 删除匹配行,匹配的字符用Shell变量替换,且变量里含有斜杠“\/”时...
1)先用s命令将此要删除的路径替换为一个文件中不可能出现的唯一字符串,然后再通过正则匹配该字符串删除该行。可以写在一条sed语句中。name=\/usr\/local\/bin\/sed -i 's#'$name'#EXCLUSIVE#;\/EXCLUSIVE\/d' hello2) grep也支持正则,可以使用grep -v反向过滤。name=\/usr\/local\/bin\/grep -v "$...

sed 删除匹配关键字的某行(shell脚本编程)
你的代码应该copy上来 可以用grep命令,把包含sed的 while 循环删除换成:grep -v "$no" stu.txt 就可以了。-v 表示显示不匹配的行

linux shell:这里的%% * 是什么意思?
{LINE%% *}的意思就是从LINE这个变量的值中,从后面开始以最长匹配删去%%后面的表达式内容。从用户的shell看,wc -l的结果是行数+空格+文件名,用户的匹配项是'空格*',那么从后面开始的最长匹配就是行数后面的所有内容,也就是说,这个表达式最终的结果是产生命令行参数所带文件的行数。看一下man...

shell脚本怎样提取匹配行及向下几行的内容,行数不定
sed 可以实现 但sed不灵活 已测试 !\/bin\/sed -n:next\/^student:\/{p:gettoendnp\/^$\/b nextb gettoend} 保存到文件code.sed中 使用 sed -f code.sed dat.txt 就可以输出文件 但文件格式必须严格,每个 student以空白行作为结束,结束行内没有任何字符。建议增加一个关键字end 用来作为结束...

shell一行一行读取?
我想写一个shell脚本,逐行读取文件,对每行记录匹配正则,匹配成功执行...1、当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行:chmod+xfilename然后,您可以通过输入:.\/filename来执行您的脚本。注释在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。2、正确返回1,...

shell删除不匹配内容的指定行
sed -n '1p;$p' filename 如果文件巨大这个效率就不行了 加上 -i 就直接写入文件了,危险危险

相似回答