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

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

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

4062 次点击
所在节点    Linux
52 条回复
lululau
2016-01-11 19:45:46 +08:00
sed -i '/rows/q'
ficenow
2016-01-11 19:51:39 +08:00
@lululau 你这样只是保留了第一个 rows 匹配行以上的内容,以下的内容全被删除了。。。
xuboying
2016-01-11 19:54:11 +08:00
perl -ne 'if ($.>=2) {print unless /rows/} else {print}'
ficenow
2016-01-11 19:54:26 +08:00
@lululau 我只是想对匹配到的行做修改,不动文件里的其他行
ficenow
2016-01-11 19:56:43 +08:00
@xuboying perl ?我想用 sed 实现><
ficenow
2016-01-11 19:57:45 +08:00
补充一点,是影响匹配到的行,文件中的其他行不能动><
xuboying
2016-01-11 19:59:27 +08:00
@ficenow 为啥不用 perl ,有 sed 的地方就有 perl
ficenow
2016-01-11 20:02:44 +08:00
@xuboying 但是你这样把所有的包含 rows 字符串的行都删除了,我想保留第一个包含 rows 字符串的行
hucsmn
2016-01-11 20:09:14 +08:00
perl -e '$n=0; while(<>) {print if ($_ =~ /b/ && !($n++))}
hucsmn
2016-01-11 20:11:00 +08:00
上面写错= =, perl -e '$n=0; while(<>) {print if (!($_=~/rows/) || !($n++))}'
AnyOfYou
2016-01-11 20:11:21 +08:00
有个思路,可以先去替换第一行的 rows 到某个特殊的内容(只找第一个),然后再去删除包含 rows 的所有行,最后再把第一行的那个特殊关键字替换回 rows 。
ficenow
2016-01-11 20:11:54 +08:00
@hucsmn 那个 rows 的匹配串在哪改呀~~
xuboying
2016-01-11 20:12:30 +08:00
@ficenow $.是第几行的意思啊
ficenow
2016-01-11 20:13:11 +08:00
@hucsmn 非常感谢你,你解决了我的问题^ ^
ficenow
2016-01-11 20:15:56 +08:00
@hucsmn 再打扰一下,如果要保留最后一行的呢?
hucsmn
2016-01-11 20:25:13 +08:00
@ficenow 试试 tac|perl .....|tac 行吗
ficenow
2016-01-11 20:30:37 +08:00
@hucsmn tac|perl -e '$n=0; while(<>) {print if (!($_=~/rows/) || !($n++))}' data|tac > test
这样吗?会卡住
xuboying
2016-01-11 20:40:54 +08:00
perl -e '@x = <>; print $x[0];for (@x[1..$#x-1]){print unless /rows/ };print $x[$#x]}
ficenow
2016-01-11 20:44:14 +08:00
@xuboying 你这个直接在命令后面加目标文件不行啊><
ficenow
2016-01-11 20:49:21 +08:00
@xuboying 把你那最后缺少的'补上也报错 syntax error at -e line 1, near "]}"

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

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

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

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

© 2021 V2EX