1
4

4 回答 4

2
于 2016-11-04T02:51:59.207 回答
2

t循环的 Sed (BRE):

$ sed ':a;s/[-/—.]\(.*=\)/_\1/;ta;' <<< "Int/domain—home.dir=/etc/int"
Int_domain_home_dir=/etc/int

-/—.找到其中一个字符时,将其替换为_. =使用反向引用捕获和输出后续文本。如果先前的替换成功,则t命令循环到 label :a 以检查进一步的替换。

编辑:

如果您在 BSD/Mac OSX 下(感谢 @mklement0):

sed -e ':a' -e 's/[-/—.]\(.*=\)/_\1/;ta'
于 2016-11-04T06:19:37.340 回答
1
于 2016-11-04T02:10:26.183 回答
1

使用 GNU sed:

echo 'Int/domain—home.dir=/etc/int' | sed 'h;s/[^=]*//;x;s/=.*//;s/[/—.]/_/g;G;s/\n//'

输出:

int_domain_home_dir=/etc/int

见:man sed。我假设您也想替换点。

于 2016-11-03T19:23:16.580 回答