gpt4 book ai didi

linux bash脚本删除某些文本

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:21 26 4
gpt4 key购买 nike

我有一个这样的 bash 脚本:

#!/bin/bash
# ALL HTML FILES
FILES="*.html"
# for loop read each file
for f in $FILES
do
INF="$f"
OUTF="$f.out.tmp"
# replace javascript
sed '/<!--fff309/,/<!--\/fff309-->/d' $INF > $OUTF
/bin/cp $OUTF $INF
/bin/rm -f $OUTF
done

html 是这样的:

<html>
<body>
<div>some normal html code</div><!--fff309-->some javascript code goes here... <!--/fff309-->

<div>
some other html....
</div>
</body>
</html>

bash 脚本有效,但是它删除了 <!--/fff309--> 下面的所有 html 部分

所以它变成了:

<html>
<body>
<div>some normal html code</div>

有没有办法让它只删除部分:

<!--fff309--> ...  <!--/fff309-->

谢谢

最佳答案

也许您可以使用 perl 就地替换,如下所示:我已如下更改您的脚本以使其更简单。

#!/bin/bash
# ALL HTML FILES
FILES="*.html"
# for loop read each file
for f in $FILES
do
perl -i -lne 'print unless(/\<\!--fff309--\>/.../\<\!--\/fff309--\>/)' $f
done

主要任务由一行完成:

perl -i -lne 'print unless(/\<\!--fff309--\>/.../\<\!--\/fff309--\>/)'

这确实会直接更改文件而无需创建临时文件。我对其进行了测试,该命令适用于我。

此外,如果您坚持使用 sed,则以下对我有用:

sed '/\<\!--fff309--\>/,/\<\!--\/fff309--\>/d' your_file

对于您的情况,最好使用 sed 的 -i 选项,它会按如下方式进行就地替换。

sed -i '/\<\!--fff309--\>/,/\<\!--\/fff309--\>/d' your_file

所以使用这个你的脚本将被更改为如下:

#!/bin/bash
# ALL HTML FILES
FILES="*.html"
# for loop read each file
for f in $FILES
do
sed '/\<\!--fff309--\>/,/\<\!--\/fff309--\>/d' $f
done

查看 HTML 文件后:

这是你需要的东西:

perl -pi -e 's/\<\!--fff309--\>.*\<\!--\/fff309--\>//g' your_file

所以你的脚本变成:

#!/bin/bash
# ALL HTML FILES
FILES="*.html"
# for loop read each file
for f in $FILES
do
perl -pi -e 's/\<\!--fff309--\>.*\<\!--\/fff309--\>//g' $f
done

关于linux bash脚本删除某些文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13697113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com