加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

为什么我不能在awk中使用字符串“?B?”作为分隔符.

发布时间:2020-12-14 00:31:06 所属栏目:Linux 来源:网络整理
导读:通过运行以下我得到的结果字符串“utf-8” 我以为用这个命令我会把字符串“tralala”返回 echo "=?utf-8?B?tralala" | awk -F "?B?" '{print $2 }' 这是为什么? 我应该使用什么分隔符来获取字符串“tralala”? 解决方法 awk分隔符不是字符串,它们是“字段
通过运行以下我得到的结果字符串“utf-8”
我以为用这个命令我会把字符串“tralala”返回

echo "=?utf-8?B?tralala" | awk -F "?B?" '{print $2 }'

这是为什么?
我应该使用什么分隔符来获取字符串“tralala”?

解决方法

awk分隔符不是字符串,它们是“字段分隔符”(因此变量名为FS),它是一种具有一些附加功能的扩展正则表达式(例如,当不在方括号内时,单个空白字符作为字段分隔符意味着全部分开连续的白色空间链,并忽略每个记录上的前导和尾随空白区域).

字符串,正则表达式和字段分隔符之间的区别非常重要.您有时也会看到使用“模式”一词 – 不使用该术语,它没有(或太多可能)含义.

一个 ?是一个RE元字符,所以你需要告诉awk不要在你的情况下通过以下任何一种方法处理它:

$echo "=?utf-8?B?tralala" | awk -F '[?]B[?]' '{print $2}'
tralala
$echo "=?utf-8?B?tralala" | awk -F '?B?' '{print $2}'
tralala

你不是第一次要严格要求吗?因为当它是RE中的第一个字符时,它的元字符功能不适用:

$echo "=?utf-8?B?tralala" | awk -F '?B[?]' '{print $2}'
tralala
$echo "=?utf-8?B?tralala" | awk -F '?B?' '{print $2}'
tralala

但恕我直言,最好还是为了清晰和面向未来而做到这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读