我有一行要替换,例如
'baseurl' => 'https://231.231.231.231'
但我只想用它来代替https://231.231.231.231部分
基本上我希望它是
'baseurl' => 'myvaluehere'
我试过sudo sed -i "s|'baseurl'|${value1}|g" file.php
匹配"baseurl"后,如何替换某些字符后面的字符?
使用sed
$ sed -E "/(baseurl'[^']*')[^']*/s//1myvaluehere/" input_file
'baseurl' => 'myvaluehere'
以下是实现它的方法:
- 找到匹配项
- 排除它
- 找到下一个模式并替换它
这是一个perl版本,因为它没有太多地使用sed
:
perl -lpe "s/'baseurl' => K'http[^ ]+/'XYZ'/g" <<< "'baseurl' => 'https://231.231.231.231'"
'baseurl' => 'XYZ'
'baseurl' =>
查找匹配项K
排除它(=忽略它进行替换('http[^ ]+
匹配此部分并替换它--假设url中没有空格'XYZ'
<<<
是一个bash功能,意思是String Here,它为perl
提供输入,或者:echo "string" | perl -lpe ...
,也可以是perl -lne ... file.txt
由于我们在perl中使用双引号"
,因此我们也可以使用变量:
VAR=XXYYZZ
perl -lpe "s/'baseurl' => K'http[^ ]+/$VAR'/g" <<< "'baseurl' => 'https://231.231.231.231'"
'baseurl' => XXYYZZ'