莱鸟求教:sed命令批量删除指定的行……

为当前最终发行版之前的所有版本提供支持
回复
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

莱鸟求教:sed命令批量删除指定的行……

#1

帖子 rock_ace » 2015-07-05 19:03

老实说,外事不举问百度,我也问过咯,不过真心看不懂…… :em20 :em20
我的要求蛮简单,我喜欢看小说,于是通过firefox的插件downthemall,把某个网站的所有小说页面下载到了一个文件夹下面,但是下载后的页面存在一个问题,那就是本地文件和网页文件显示上面差距极大。现在我想把这个文件夹下面所有的3-81行,83-104行,107-124行都给删除掉,不知道怎么入手,拜托大虾们直接给个能用的命令行吧……呃,一个命令行兴许不可能直接完成,一次一个范围也是可以的,关键在于怎么轮询当前目录下面所有的文件,另外,麻烦尽可能的讲解一下,谢谢!
呃,现在碰到一个新问题:俺有个文件,里面有N多括号,想把里面的括号给整掉要怎么做呀?比如:

代码: 全选

cat one
  • 42+(16-5)=1
    (52+6)-9=3
    12+(16+5)-(12+3)=5
我想要变成:
  • 42+=1
    -9=3
    12+-=5
怎么办呀?
:em03 :em03 :em03 :em03 :em03
上次由 rock_ace 在 2015-08-29 19:11,总共编辑 1 次。
头像
duguyipiao
帖子: 157
注册时间: 2011-09-13 10:31
送出感谢: 1 次
接收感谢: 18 次

Re: 莱鸟求教:sed命令批量删除指定的行……

#2

帖子 duguyipiao » 2015-07-05 19:19

find+xargs 应该可以,可以搜索一下或者参考这里
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

Re: 莱鸟求教:sed命令批量删除指定的行……

#3

帖子 rock_ace » 2015-07-05 19:25

duguyipiao 写了:find+xargs 应该可以,可以搜索一下或者参考这里
不能直接给个命令行吗?
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

Re: 莱鸟求教:sed命令批量删除指定的行……

#4

帖子 rock_ace » 2015-07-05 20:11

呃,自己弄出来了,谢谢各位关注本贴的站友!
另外,把命令贴出来,作个备忘(用了三条命令):
sed -i 107,124d `find . -name "*.html"`
sed -i 83,104d `find . -name "*.html"`
sed -i 3,81d `find . -name "*.html"`
注意的是:
1、find . -name中,“.“和"-name“中间有个空格……
2、find . -name两边的'号,是不单引号,而是tab上面的那个符号。
-----------
大虾们别喷,知道你们懂,可俺不懂,俺就一鸟蛋,正学着呢……另外,如果有哪位大虾有更好的办法,也麻烦指点一下新人,谢谢!
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

Re: 莱鸟求教:sed命令批量删除指定的行……

#5

帖子 rock_ace » 2015-07-05 20:50

备忘:如何从网络上下载小说并进阶处理:
1、打开小说index.html,并用downthemall插件下载至目录,例:从http://www.cishuge.com/read/2/2111/下载的名为“超级提取”的小说,至主目录下“下载/超级提取“。
2、删除指定行,如第1行、3-81行,83-104行,107-124行(删除的时候从高行位到低行位,否则需要调整行号,不划算……):
sed -i 107,124d `find . -name "*.html"`
sed -i 83,104d `find . -name "*.html"`
sed -i 3,81d `find . -name "*.html"`
sed -i 1d `find . -name "*.html"`
3、合并所有页面:
  cat `la` > 超级提取.txt
4、用gedit 编辑并删除不需要的内容(当然也可以用sed命令,不过这里用文本编辑器处理会比较快,这里主要处理空格、换行符并删除一些放屁之流的页面套话)。
5、删除所有以空格组成的空行(因空行太多,用gedit处理比较慢,可能会死机):
sed -i /^[[]]*$/d 超级提取.txt
6、弄完后,再用FBReader小说阅读器打开就可以开开心心地看小说咯……
呼……我就看一小说,容易嘛我?
头像
duguyipiao
帖子: 157
注册时间: 2011-09-13 10:31
送出感谢: 1 次
接收感谢: 18 次

Re: 莱鸟求教:sed命令批量删除指定的行……

#6

帖子 duguyipiao » 2015-07-05 21:30

rock_ace 写了: 2、删除指定行,如第1行、3-81行,83-104行,107-124行(删除的时候从高行位到低行位,否则需要调整行号,不划算……):
sed -i 107,124d `find . -name "*.html"`
sed -i 83,104d `find . -name "*.html"`
sed -i 3,81d `find . -name "*.html"`
sed -i 1d `find . -name "*.html"`
sed 可以多重匹配,应该可以这样

代码: 全选

sed -i "1d;3,81d;83,104d;107,124d" `find . -name "*.html"`
我也没仔细研究过sed,只是看过这里的介绍。
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山
送出感谢: 13 次
接收感谢: 62 次

Re: 莱鸟求教:sed命令批量删除指定的行……

#7

帖子 cao627 » 2015-07-06 11:48

可直接用shell文件名扩展
比如要对某目录下的所有文件进行操作
cd /your_target_dir
sed -i 'command' *

这里的星号*会自动扩展为当前目录下的所有文件
如果只要对当前目录下的html后缀的文件进行操作,可写为

sed -i 'command' *html
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

Re: 莱鸟求教:sed命令批量删除指定的行……

#8

帖子 rock_ace » 2015-07-07 7:36

cao627 写了:可直接用shell文件名扩展
比如要对某目录下的所有文件进行操作
cd /your_target_dir
sed -i 'command' *

这里的星号*会自动扩展为当前目录下的所有文件
如果只要对当前目录下的html后缀的文件进行操作,可写为

sed -i 'command' *html
呃,我试过了,貌似不行的啊?我写的是:

代码: 全选

sed -i 107,124d *.html
你确定有效吗?为毛我执行后没有反映?
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

Re: 莱鸟求教:sed命令批量删除指定的行……

#9

帖子 rock_ace » 2015-07-07 7:43

rock_ace 写了:
cao627 写了:可直接用shell文件名扩展
比如要对某目录下的所有文件进行操作
cd /your_target_dir
sed -i 'command' *

这里的星号*会自动扩展为当前目录下的所有文件
如果只要对当前目录下的html后缀的文件进行操作,可写为

sed -i 'command' *html
呃,我试过了,貌似不行的啊?我写的是:

代码: 全选

sed -i 107,124d *.html
你确定有效吗?为毛我执行后没有反映?
又搞了一遍,结果发现竟然成功通过,可为毛上次不能通过呢?俺才40岁,不可能出现老年痴呆症状呀?我确定上次我的输入没有错的,为此,我还专门看了.bash_history……笨兔,为你伤心为你哭,你到底要搞么啊?我独自一人划圈圈支咯……
不过仍旧要谢谢你!谢谢楼上给答案的所有大虾!
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

Re: 莱鸟求教:sed命令批量删除指定的行……

#10

帖子 rock_ace » 2015-08-09 19:12

备忘:
  1、可以利用windows的记事本,将文件内容存诸为utf-8格式,在ubuntu里就可以无乱码打开了(cat、sed等命令亦有效);
  2、利用下列命令可以删除以“全文字更新”开头的行,如果不加^,则可以删除包含“全文字更新”的行:

代码: 全选

sed -i '/^全文字更新/'d 小说名.txt
rock_ace
帖子: 36
注册时间: 2015-06-17 10:22
系统: Ubuntu 12.04 LTS
送出感谢: 1 次
接收感谢: 0

Re: 莱鸟求教:sed命令批量删除指定的行……

#11

帖子 rock_ace » 2015-09-27 8:36

备忘:
  在windows中创建的文本文件直接在linux中编辑时,有时会出现乱码的情况,这个时候要将此文件转换成linux能够识别的文件,那么,如何将GB2312文本转成UTF-8文本呢?有以下两种方法:

代码: 全选

iconv -f "gbk" -t "utf-8" infile > outfile
piconv -f "gbk" -t "utf-8" infile > outfile
  通过以上代码,可以将文件转成linux能够识别的文件,接下来就可以使用cat或者sed命令了。
回复

回到 “老旧版本支持”