试图制作一个从文件中提取html代码的bash脚本

试图制作一个从文件中提取html代码的bash脚本,bash,scripting,grep,Bash,Scripting,Grep,我正在制作一个脚本,从目录中的.html文件中提取html代码,该目录中的html标记之外恰好有非html代码。我希望输出覆盖源文件 这是我到目前为止所做的,但我在工作中遇到了困难 #!/bin/bash for f in `ls .`; do if [[ $f =~ \.html$ ]] then cat $f | tr "\n" "|" | grep -o '<html>.*</html>' | sed 's/|/\n/g' > $f fi done

我正在制作一个脚本,从目录中的.html文件中提取html代码,该目录中的html标记之外恰好有非html代码。我希望输出覆盖源文件

这是我到目前为止所做的,但我在工作中遇到了困难

#!/bin/bash

for f in `ls .`; do
if [[ $f =~ \.html$ ]] 
then
    cat $f | tr "\n" "|" | grep -o '<html>.*</html>' | sed 's/|/\n/g' > $f
fi
done
#/bin/bash
对于'ls'中的f;做
如果[[$f=~\.html$]]
然后
类别$f | tr“\n”“grep-o'.*”| sed's/|/\n/g'>$f
fi
完成
#/bin/bash
对于'ls'中的f;做
如果[[$f=~\.html$]]
然后
类别$f | tr“\n”“grep-o'.*”| sed's/|/\n/g'>$f.temp
mv$f.temp$f
fi
完成

您可以将整个脚本替换为:


sed-i'/请给出一些您喜欢的数据和输出示例。您正在执行
cat$f|……>$f
。这将不起作用,您将清空
$f
文件。相反,使用一些临时文件或其他方法。谢谢,使用临时文件是有效的。解析
ls
是不推荐的。相反,您可以在*
中为f执行
。另外,
cat$f|tr…
可以简化为
tr…<$f
#!/bin/bash

for f in `ls .`; do
if [[ $f =~ \.html$ ]] 
then
    cat $f | tr "\n" "|" | grep -o '<html>.*</html>' | sed 's/|/\n/g' > $f.temp
    mv $f.temp $f
fi
done