大型多文件上的sed失败(每个37kB)

时间:2011-05-08 17:49:13

标签: 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' &&
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'

我有什么遗漏吗?

1 个答案:

答案 0 :(得分:2)

我会说这是非常低效的。您每次都找到相同的设置og *.html文件并运行一些sed命令。为什么不将多个sed命令组合成一个大的sed命令,如:

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

并在1个单一查找命令中执行所有处理:

find ./ -type f -name '*.html' | xargs sed -i.bak ....