假设我有一个变量$email
,其值为stack.over@gmail.com
。我想在每 点之前添加\
< strong>除了最后一个点,并将其存储在新变量$email_soa
中。
$email_soa
应为stack\.over@gmail.com
。
答案 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##*.}