Bash:将文件中的特定行更改为包含该行的内容

时间:2013-05-09 11:16:23

标签: bash file

我正在尝试更改这样的文件:

Hello
My name is [Bob]
My age is 34

应该变成:

Hello
My name is [Bob]SomeText[Bob]SomeText
My age is 34

然而,为了方便起见,我知道我正在寻找的'字符串'总是会开始 [Bo

如果您需要更多信息,请提供任何帮助,只需说:)

3 个答案:

答案 0 :(得分:0)

如果您真的不需要仅使用bash,则可以使用sed

 sed 's/\[Bo.*/&SomeText&SomeText/g' filename

输出:

Hello
My name is [Bob]SomeText[Bob]SomeText
My age is 34

答案 1 :(得分:0)

使用sed。将所有内容从[Bo匹配到第一个]并替换它:

sed 's/\(\[Bo[^\]]*\]\)/\1SomeText\1/'

答案 2 :(得分:0)

perl -pe 'm/(\[Bo.*?\])/g;$a=$1;s/(.*\[Bo.*?\])/$1sometext${a}sometext/g;' your_file

如果您的[Bo。*]始终存在于该行的末尾,则上述解决方案可以正常工作。 测试:

> cat temp
Hello
My name is [Bob]
My age is 34
> perl -pe 'm/(\[Bo.*?\])/g;$a=$1;s/(.*\[Bo.*?\])/$1sometext${a}sometext/g;' temp
Hello
My name is [Bob]sometext[Bob]sometext
My age is 34
>