如何在Ubuntu中使用sed替换匹配后的某个位置



我有一行要替换,例如

'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'

以下是实现它的方法:

  1. 找到匹配项
  2. 排除它
  3. 找到下一个模式并替换它

这是一个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'

相关内容

  • 没有找到相关文章

最新更新