我正在尝试使用正则表达式修改电子邮件后的字段。
demo@example.com:john
desired output demo@example.com|john
这是我的脚本,但我得到空数据是什么问题?
awk '{sub(/\(.*@.*\):/,"|")}'
答案 0 :(得分:2)
编辑: 似乎OP需要始终覆盖邮件ID然后想要更改冒号,因此以下可能有助于此案例。
echo "demo:@example.com:john" | sed 's/\(.*\.com\):\(.*\)/\1|\2/'
简单sed
sed 's/:/|/' Input_file
OR
echo "demo@example.com:john" | sed 's/:/|/'
解决方案第二:
echo "demo@example.com:john" | sed 's/\([^:]*\):\(.*\)/\1|\2/'
解决方案第3名:
echo "demo@example.com:john" | awk '{sub(/:/,"|")} 1'
答案 1 :(得分:0)
如果你想根据分隔符前的值是否与正则表达式匹配来有条件地替换字段分隔符,这里是一个Awk选项:
$ echo -e "demo@example.com:john\nnot an email:dave" |
awk 'BEGIN { FS=":"; OFS="|" } NF == 2 && $1 ~ /^.*@.*$/ { $1=$1 } 1'
demo@example.com|john
not an email:jacob