我需要帮助来编写一个正则表达式模式来搜索和替换使用sed:
要搜索的字符串具有以下模式:
string = "text"
基本上是一个带有未确定空格字符的字符串,后跟“”中的一些文本。我需要使用sed替换文本。
答案 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"