在变量中逃避多个点

时间:2016-07-26 16:36:15

标签: bash

假设我有一个变量$email,其值为stack.over@gmail.com。我想在 之前添加\ < strong>除了最后一个点,并将其存储在新变量$email_soa中。

在这种情况下,

$email_soa应为stack\.over@gmail.com

4 个答案:

答案 0 :(得分:4)

sed -E 's/\./\\\./g;s/(.*)\\\./\1\./'

应该这样做。

<强>测试

$ var="stack.over@flow.com"
$ echo $var | sed -E 's/\./\\\./g;s/(.*)\\\./\1./'
stack\.over@flow.com
$ var="stack.over@flow.com."
$ echo $var | sed -E 's/\./\\\./g;s/(.*)\\\./\1./'
stack\.over@flow\.com.

注意

\\生成一个字面反斜杠,\.生成一个文字点

答案 1 :(得分:2)

您可以使用gawk

var="stack.over@gmail.com"
gawk -F'.' '{OFS="\\.";a=$NF;NF--;print $0"."a}' <<< "$var"

输出:

stack\.over@gmail.com

说明:

  • -F'.'按点分割字符串
  • OFS="\\."将输出字段分隔符设置为\.
  • a=$NF将最后一个点之后的部分保存在变量&#39; a&#39;中。 NF是字段数。
  • NF--递减字段计数,这将有效地删除最后一个字段。这也告诉awk使用OFS重新组合记录。此功能至少可以与GNU gawk一起使用。
  • print $0"."a打印重新组合的记录以及一个点和值a

答案 2 :(得分:2)

您可以使用perl来执行此操作:

perl -pe 's/\.(?=.*\.)/\\./g' <<<'stack.over@gmail.com'

在字符串中后面有点后面的任何点之前添加斜杠。

答案 3 :(得分:1)

这个怎么样:

temp=${email%.*}
email_soa=${temp/./\\.}.${email##*.}