如何在给定字符串的一行之后快速向所有 html 文件添加一行

Ror*_*ach 1 bash echo

简而言之

有什么方法可以 bash 命令行:echo "***some code***" >> "***all files of some type***"在文件中包含某个字符串的行之后,例如<body?

在龙

我必须将谷歌分析添加到网站。它有一个过去几年的东西档案。

对于最近的一些存档年份,我刚刚添加了:

...
</head>
<body<?php if ($onpageload != "") { echo " onload=\"$onpageload\""; }?>>
<?php include_once("analyticstracking.php") ?>
...
Run Code Online (Sandbox Code Playgroud)

进入 common_header.php 文件

对于一些早期的东西,他们没有制作 common_header.php 文件。因此,对于管理没有通用标题的年份的文件夹,有很多 html 文件需要此行:

<?php include_once("analyticstracking.php") ?>

是否有某种方法来 bash 命令行:echo "<?php include_once("analyticstracking.php") ?>" >> "*.html"在包含某个字符串的文件之后,例如<body

该站点使用 php、python 和 html(带有一些 javascript css 等)进行管理。

我在 ubuntu 上。另请注意,我对此类网页较新,因此如果我的问题在某种程度上是错误或愚蠢的问题,请告诉我。

Dar*_*rio 5

例如,如果您想包含</body>, 就地编辑所有文件的行之前添加一行,您可以

sed -i -e '\@</body>@i\New stuff' *.html
Run Code Online (Sandbox Code Playgroud)

同样的,但之后该行匹配<!-- insert here -->

sed -i -e '/<!-- insert here -->/a\New stuff' *.html
Run Code Online (Sandbox Code Playgroud)

sed用一个s命令跨越多行是相当麻烦的。面向行的命令是i\(insert before) 和a\(insert after)。

你的特殊情况是

sed -i -e '/<body/a\<?php include_once("analyticstracking.php") ?>' *.html
Run Code Online (Sandbox Code Playgroud)

但前提是您的body标签没有跨越多行的属性。html/xml使用不知道其结构的文本工具编辑文件总是有问题的,但如果您确定正在编辑的文件中的实际文本,它可以工作。