大家好,我有一个关于 sed 命令的问题想问大家^ ^

2016-01-11 19:42:49 +08:00
 ficenow

是这样的,我想用 sed 删除匹配到的行的指定范围行,比如 sed -i '/rows/d' data 是删除所有匹配到的包含 rows 字符串的行,但是在这些匹配行中,我想保留第一行,删除第 2 行到最后一行,有人知道怎么做吗?先谢谢了^ ^

4023 次点击
所在节点    Linux
52 条回复
xuboying
2016-01-11 20:52:20 +08:00
哦,最后一花括号去掉换成单引号
ficenow
2016-01-11 20:55:01 +08:00
@xuboying 嗯,试了,但是所有的 rows 行都没有了>< 不是预期的效果
xuboying
2016-01-11 20:58:37 +08:00
@ficenow 怎么可能, print $x[0] print $x[$#x] 是分别打印第一和最后一行
ficenow
2016-01-11 21:00:44 +08:00
@xuboying 可是我重定向到文件里所受 rows 关键字搜索不到啊。。
xuboying
2016-01-11 21:02:30 +08:00
@ficenow 其掉 for 那段执行能得到第一和最后行吗?
ficenow
2016-01-11 21:04:29 +08:00
@xuboying 能,得到的是文件里的第一行和最后一行
Earthman
2016-01-11 21:04:38 +08:00
第一行放暂存器,然后取出来,一行可以有多个 sed 命令,命令用 ; 分割
ficenow
2016-01-11 21:09:49 +08:00
@xuboying 我觉得你可能理解错了,我的包含 rows 串的行不在文件的第一行和最后一行的
kingddc314
2016-01-11 21:10:52 +08:00
sed '2,$s/aaa/bbb/g' text
ficenow
2016-01-11 21:12:39 +08:00
@kingddc314 你也理解错了,我的匹配行不在文件的第一行的
kingddc314
2016-01-11 21:14:53 +08:00
@ficenow 看错了,以为你是要从第二行开始替换,结果你是删除
lululau
2016-01-11 21:50:36 +08:00
sed -i '0,/rows/{//d}'
kingddc314
2016-01-11 21:56:11 +08:00
_rep() {
text=`sed -n '/$1/p' $2 | head -1`
n=`sed -n '/$1/=' $2 | head -1`
sed -i '/$1/d' $2 && sed -i "${n}i $text" $2
}
_rep match a.txt
# 鉴于楼主必须使用 sed ,可以先找出第一次匹配的内容和行号,然后删除后再把这一行给添加在之前的位置
# ps : osx 的 sed 和 linux 的差别很大!!!
rrfeng
2016-01-11 22:01:27 +08:00
看到楼上都没有正确回答,闪开我要装逼了!

sed '1,/rows/!{/rows/d}'
rrfeng
2016-01-11 22:02:44 +08:00
啊 32 楼已经给出来了……
kingddc314
2016-01-11 22:07:14 +08:00
@rrfeng 可是楼主要的是保留第一次匹配的行,不是第一行
xuboying
2016-01-11 22:16:04 +08:00
@ficenow 不好意思,题目没看清 perl -e '@x=<>;@i = grep { $x[$_]=~/rows/ } 0..$#x;$x[$i[$_]]="" for (1..$#i-1);print @x'
rrfeng
2016-01-11 22:17:36 +08:00
@kingddc314 请自行测试
kingddc314
2016-01-11 22:27:29 +08:00
@rrfeng 我错了,你这确实是对的, good job
Elethom
2016-01-11 22:49:12 +08:00
@rrfeng
僅限 GNU sed 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249964

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX