使用sed awk替换字符串中的字符

时间:2014-11-16 17:52:27

标签: html regex awk sed

我在一个文件夹中有大约300个文件。 我需要在文件中搜索此标签

<b>This string must stay</b><br />    

并用

替换它们
<CustomerInfo>This string must stay</CustomerInfo>    

不得更改内部字符串。

3 个答案:

答案 0 :(得分:0)

试试这个:

sed 's@<b>.*</b><br />@<CustomerInfo>This string must stay</CustomerInfo>@g' file.txt

答案 1 :(得分:0)

这将替换当前目录和子目录中每个文件中的字符串(它不会忽略二进制文件,所以要小心你想要的)

这适用于find in command dependencies(unix有)

首先要确保这不会破坏任何尝试(它只会显示它的作用的预览):

find . -type f -exec sed -e 's@<b>\(.*\)</b><br />@<CustomerInfo>\1</CustomerInfo>@g' {} \;

如果它按预期工作,那么这里是龙:

find . -type f -exec sed -i 's@<b>\(.*\)</b><br />@<CustomerInfo>\1</CustomerInfo>@g' {} \;

答案 2 :(得分:0)

您可以使用以下内容:

sed -r 's#<b>([^<]*)</b><br />#<CustomerInfo>\1</CustomerInfo>#g' file

一旦确定无效,请替换-r -ir进行现场编辑。

如果您想通过文件运行它,当您在某处发表评论时,请执行以下操作:

find $1 -type f -iname '*.html' -exec \ 
       sed -r 's#<b>([^<]*)</b><br />#<CustomerInfo>\1</CustomerInfo>#g' {} \;

解释

  • <b>([^<]*)</b><br />寻找具有<b>....</b><br />的内容并在其间捕捉文字。
  • <CustomerInfo>\1</CustomerInfo>将其替换为<CustomerPage> +给定文字+ </CustomerPage>

测试

给出一个示例文件:

$ cat a
hello
bye
aaa <b>hello</b><br /> beee
<b>hello</b><br />

<b>hello</b>blabla

让我们试一试:

$ sed -r 's#<b>([^<]*)</b><br />#<CustomerInfo>\1</CustomerInfo>#g' a  hello
bye
aaa <CustomerInfo>hello</CustomerInfo> beee
<CustomerInfo>hello</CustomerInfo>

<b>hello</b>blabla