To *_* Do 4 linux sed find-and-replace
我有一系列 HTML 文件,其中包含如下两行:
<body>
<h1>Title</h1><p>
<a href="url">Description</a><br>
Run Code Online (Sandbox Code Playgroud)
我想使用 bash 脚本用其他内容替换此文本。我想
sed -i -r 's/<h1>Title.*?$\/^.*?<br>/Replacement text/1' filename.html
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我怀疑它卡在新线路上,不知道如何解决这个问题。
任何帮助表示赞赏。随意推荐其他 Linux 工具sed,只要它可以工作!
我会为此使用 Perl:
perl -0pe 's/<h1>Title.*\n.*<br>/replacement/' filename.html
Run Code Online (Sandbox Code Playgroud)
在这里,-0让 Perl 在NUL字符上拆分记录而不是逐行读取,这是使用该-p选项时的默认设置。
使用 Perl 正则表达式,您需要.* 多次匹配任何字符,并将换行符与\n.
例子:
$ echo '<body>
<h1>Title</h1><p>
<a href="url">Description</a><br>' | perl -0pe 's/<h1>Title.*\n.*<br>/replacement/'
<body>
replacement
Run Code Online (Sandbox Code Playgroud)