如何在bash编程中替换多行文本

时间:2017-10-01 13:33:27

标签: bash sed

我想替换以下文字

text := a \
        b \
        c

使用以下内容:

text := d \
        e \
        f

在bash文件中。

我尝试了不同版本的“sed'”,但没有一个版本可以使用,例如:

old_path='text := a \\\n\t\tb \\\n\t\tc'
new_path='text := d \\\n\t\te \\\n\t\tf'
sed -i -e "s%old_path%new_path%g" text.txt

3 个答案:

答案 0 :(得分:1)

尝试简单的sed。

sed 's/a \\/d \\/;s/b \\/e \\/;s/c/f/'   Input_file

说明:我只是使用s/text_which_needs_to_be_replaced/new_text使用sed的替代选项。通过用半冒号分隔它们将确保我们可以执行多次替换。根据您的需要进行替换。如果您对此有任何疑问,请告诉我。

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed '/^text := a \\/,/^\tc$/c\test := d \\\n\te \\\n\tf' file

'/^text := a \\/,/^\tc$/范围内的文字更改为所需的值。

答案 2 :(得分:1)

如果您不介意使用 Perl ,请尝试:

~ ❱ perl -pe 's/ ((?=[a-z]).)/" ".chr(ord($1)+3)/eg' file
text := d \
        e \
        f 
~ ❱ 

您角色的ASCII代码为:100101102
因此,如果您向3添加a b c,则d e f成为DeleteBehavior.Cascade

相关问题