用于搜索的正则表达式模式

时间:2016-05-13 15:10:45

标签: regex sed

我需要帮助来编写一个正则表达式模式来搜索和替换使用sed:

要搜索的字符串具有以下模式:

string         = "text"

基本上是一个带有未确定空格字符的字符串,后跟“”中的一些文本。我需要使用sed替换文本。

1 个答案:

答案 0 :(得分:0)

尝试一下:

's/^\(string *=\).*$/\1'"$replace_val"/

()需要转义\(\)才能在替换部分中引用。

^表示开始行。

\(string *=\)表示由\( ... \)字组成的字符组string,后跟*,表示0或多个(空格)。 char序列必须以=结尾。这是正则表达式中遇到的第一个组,因此可以在替换部分中使用\1引用它。

.*$表示任何0或多个字符的序列,最多$;行尾。

如果你需要保留双引号:

's/^\(string *=\).*$/\1'\""$replace_val"\"/

没有双引号的第一个正则表达式的测试:

$ cat properties.txt

# property file
name   =  "smith"

string     = "text"

$ replace_val=stackoverflow
$ cp properties.txt properties2.txt
$ sed -i 's/^\(string *=\).*$/\1'"$replace_val"/ properties.txt
$ cat properties.txt

# property file
name   =  "smith"

string     =stackoverflow

使用双引号进行第二次测试:

$ sed -i 's/^\(string *=\).*$/\1'\""$replace_val"\"/ properties2.txt
$ cat properties2.txt

# property file
name   =  "smith"

string     ="stackoverflow"