在正则表达式之后或之前更改字段

时间:2018-03-24 19:15:12

标签: bash perl awk sed

我正在尝试使用正则表达式修改电子邮件后的字段。

demo@example.com:john

desired output demo@example.com|john

这是我的脚本,但我得到空数据是什么问题?

awk '{sub(/\(.*@.*\):/,"|")}'

2 个答案:

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