Site icon 时鹏亮的Blog

Linux服务器运维之find配合sed批量替换内容-纯小白教程

请知悉:本文最近一次更新为 8年 前,文中内容可能已经过时。

这教程就是写给纯小白的,看不懂的说明你连小白都不算,洗洗睡吧~
以最近的例子,需求是需要对所有静态文件进行内容修改,即

将此代码粘贴到页面的 <head> 部分中,并使其尽可能靠近顶部位置:
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer' '&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js id='+i+dl;f.parentNode.replaceBefore(j,f);
})(window,document,'script','dataLayer','GTM-xxxxx');</script>
<!-- End Google Tag Manager -->

逻辑转换为:
将所有html后缀的文件内容中

</head>

替换为

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer' '&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js id='+i+dl;f.parentNode.replaceBefore(j,f);
})(window,document,'script','dataLayer','GTM-xxxxxx');</script>
<!-- End Google Tag Manager -->
</head>

实现涉及指令find、sed,有兴趣的自己了解总结。

完整操作方法:
1.notepad++新建一个文件,贴入目标内容:

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer' '&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js id='+i+dl;f.parentNode.replaceBefore(j,f);
})(window,document,'script','dataLayer','GTM-xxxxxx');</script>
<!-- End Google Tag Manager -->
</head>

Ctrl+H,调出批量替换功能,查找目标

\r\n

替换为

换行符

查找模式为:扩展(\n,\r,\t,\0,\x…)

点击全部替换,结果如下:

<!-- Google Tag Manager -->换行符<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':换行符new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],换行符j=d.createElement(s),dl=l!='dataLayer' '&l='+l:'';j.async=true;j.src=换行符'https://www.googletagmanager.com/gtm.js id='+i+dl;f.parentNode.replaceBefore(j,f);换行符})(window,document,'script','dataLayer','GTM-xxxxxx');</script>换行符<!-- End Google Tag Manager -->换行符</head>

之后,切换查找模式为普通

由于存在/和!(如存在”,也需要转义),需要进行转义,分别替换

/

\/

替换

!

\!

结果如下:

<\!-- Google Tag Manager -->换行符<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':换行符new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],换行符j=d.createElement(s),dl=l!='dataLayer' '&l='+l:'';j.async=true;j.src=换行符'https:\/\/www.googletagmanager.com\/gtm.js id='+i+dl;f.parentNode.replaceBefore(j,f);换行符})(window,document,'script','dataLayer','GTM-xxxxxx');<\/script>换行符<\!-- End Google Tag Manager -->换行符<\/head>

将换行符 三个字替换为

\n

得到最终替换字符串:

<\!-- Google Tag Manager -->\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer' '&l='+l:'';j.async=true;j.src=\n'https:\/\/www.googletagmanager.com\/gtm.js id='+i+dl;f.parentNode.replaceBefore(j,f);\n})(window,document,'script','dataLayer','GTM-xxxxxx');<\/script>\n<\!-- End Google Tag Manager -->\n<\/head>

替换指令:

find . -type f -name "*.文件后缀" -exec sed -i "s/目标字符串/最终替换字符串/g" {} +

其中文件后缀为html
目标字符串转义后的即:

</head>

最终替换字符串就是上面得到的部分,完整指令为:

find . -type f -name "*.html" -exec sed -i "s/<\/head>/<\!-- Google Tag Manager -->\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer' '&l='+l:'';j.async=true;j.src=\n'https:\/\/www.googletagmanager.com\/gtm.js id='+i+dl;f.parentNode.replaceBefore(j,f);\n})(window,document,'script','dataLayer','GTM-xxxxxx');<\/script>\n<\!-- End Google Tag Manager -->\n<\/head>/g" {} +

Linux下,利用cd指令进入要处理的目录,执行上面的完整指令既可实现所有html批量替换。

补充说明,n在Linux下表示换行符,至于转义是什么意思,不理解的自己查。

本方法旨在抛砖引玉,其他字符串的替换请自行举一反三。


如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。

尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《Linux服务器运维之find配合sed批量替换内容-纯小白教程》相关的博文:

Exit mobile version