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 回答