查找所有匹配项并使用模式匹配替换字符串

时间:2012-12-17 21:30:41

标签: bash sed

我想对以下行进行字符串替换。我不想替换任何未在URL格式中显示的事件,因此{@ 1}}在一行上或以可变格式(secure.XYZ.ab.mydomain.com)不应被替换。

$myvar = secure.XYZ.ab.mydomain.com

我遇到的问题是,https://secure.XYZ.ab.mydomain.com -> https://secure.future.qa.mydomain.com XYZ可能是3个不同变量的组合。因此,为了简化操作,我想在abhttps://之前的时段之间替换所有内容。

忘记添加,我将循环遍历目录中的文件。

3 个答案:

答案 0 :(得分:2)

 echo "https://secure.XYZ.ab.mydomain.com"|sed -r 's#(https://secure\.).*(\.mydomain.com)#\1future.qa\2#'              
https://secure.future.qa.mydomain.com

AWK:

echo "https://secure.XYZ.ab.mydomain.com"|awk 'BEGIN{FS=OFS="."} {$2="future";$3="qa"}1'
 https://secure.future.qa.mydomain.com

答案 1 :(得分:1)

你可以:

echo "https://secure.XYZ.ab.mydomain.com" | sed -e 's+https://[^/]*\.mydomain.com+https://secure.future.qa.mydomain.com+'

如果它在文件中,您可以:

sed -ie 's+https://[^/]*\.mydomain.com+https://secure.future.qa.mydomain.com+g' <filename>

答案 2 :(得分:0)

搜索并替换目录中的所有文件:

find . -maxdepth 1 -type f -exec sed 's_https://.*[.]mydomain[.]com_https://secure.future.qa.mydomain.com_g' {} \;