Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 在多个大文件上执行Sed失败(每个文件37kB)_Unix_Sed - Fatal编程技术网

Unix 在多个大文件上执行Sed失败(每个文件37kB)

Unix 在多个大文件上执行Sed失败(每个文件37kB),unix,sed,Unix,Sed,我在多个小文件上试过,一切都很好。 但是当在多个文件(每个文件大小为37kB)上测试sed时,只有一个文件被完全处理,而其他文件则变得可怕 下面是我正在运行的代码: find ./ -type f -name '*.html' | xargs sed -i 's/<title>/sblmtitle\n<title>/g' && find ./ -type f -name '*.html' | xargs sed -i '1,/sblmtitle/d' &a

我在多个小文件上试过,一切都很好。 但是当在多个文件(每个文件大小为37kB)上测试sed时,只有一个文件被完全处理,而其他文件则变得可怕

下面是我正在运行的代码:

find ./ -type f -name '*.html' | xargs sed -i 's/<title>/sblmtitle\n<title>/g' &&
find ./ -type f -name '*.html' | xargs sed -i '1,/sblmtitle/d' &&
find ./ -type f -name '*.html' | xargs sed -i 's/<div class="entry entry-cont"/\n<div class="entry entry-cont"/g' &&
find ./ -type f -name '*.html' | xargs sed -i -n '/<div class="entry entry-cont"/q;p' &&
find ./ -type f -name '*.html' | xargs sed -i 's/<\/title>/<\/title>\nslpstitle/g' &&
find ./ -type f -name '*.html' | xargs sed -i 's/<h1><a href="/sblmurl\n<link>/g' &&
find ./ -type f -name '*.html' | xargs sed -i '/slpstitle/,/sblmurl/d' &&
find ./ -type f -name '*.html' | xargs sed -i '/<link>/s/">/<\/link>\nslpsurl/g' &&
find ./ -type f -name '*.html' | xargs sed -i 's/<div id="down" class="entry entry-cont">/sblmkonten\n<div id="down" class="entry entry-cont">\ndeldlmkonten/g' &&
find ./ -type f -name '*.html' | xargs sed -i '/slpsurl/,/sblmkonten/d' &&
find ./ -type f -name '*.html' | xargs sed -i '/deldlmkonten/,/<iframe/d' &&
find ./ -type f -name '*.html' | xargs sed -i 's/<div id="down" class="entry entry-cont">/<description>/g' &&
find ./ -type f -name '*.html' | xargs sed -i '$s/$/<\/description>/' &&
find ./ -type f -name '*.html' | xargs sed -i 's%​%%g' &&
find ./ -type f -name '*.html' | xargs sed -i '/^$/d'
find./-type f-name'*.html'| xargs sed-i's//sblmtitle\n/g'&&
查找。/-键入f-name'*.html'| xargs sed-i'1,/sblmtitle/d'&&

find./-typef-name'*.html'| xargs sed-i的/我会说这是非常低效的。每次都会找到相同的set og
*.html
文件,并运行一些sed命令。为什么不将多个sed命令组合成一个大sed命令,如:

sed -e 's/<title>/sblmtitle\n<title>/g' -e '1,/sblmtitle/d' ....

甚至比命令行上大量的
-e
选项更好的方法是使用sed经常被遗忘的从文件中读取命令的功能。那么,整堆替换都可以用一种更理智的方式写出来。@John:我同意你的基本观点。但是,脚本必须稍微修改(我现在观察到),因为前两个脚本是串联工作的:“
xargs sed-I's//sblmtitle\n/g'
”和“
xargs sed-I'1,/sblmtitle/d'
”不能直接组合在一个脚本中。也就是说,我相信可以实现所需的结果,可能是使用“
-e'//p'-e'1,//d'
”在删除行之前打印标题。同意,在这种情况下,最好将多个sed命令放在单独的文件中。我将添加一个编辑部分。你说“其他文件变得可怕”是什么意思?倒数第二行是“
xargs sed-I's%​%%g'
“全局地将空字符串替换为空字符串-这不是一个如此快速的操作,而且似乎有点毫无意义。@John Zwinck,它处理得不干净。它应该移除的东西仍然存在there@JonathanLeffler,这不是空的,但它的某个未知字符被替换为空
find ./ -type f -name '*.html' | xargs sed -i.bak ....