shell - 如何在 MAC 上使用 sed/awk(不支持 gnu)将单引号添加到仅在单词中间(或除开头之外的任何位置)有点的单词中?
问题描述
包含多行的输入文件的一部分:
.class xyz.com class.name_1 and xxx.co .class class.man_3 'abc.name_4' #id
#id .class abc.name class.name and class.name_2 class.name_3 .class class.dragon class.xyz
愿望输出:
.class 'xyz.com' 'class.name_1' and 'xxx.co' .class 'class.man_3' 'abc.name_4' #id
#id .class 'abc.name' 'class.name' and 'class.name_2' 'class.name_3' .class 'class.dragon' 'class.xyz'
也应该处理这个输入:
.xxx-xxxx.xxxx-xxxx
.xxxx.xxxx
xic.aco-eiopw-ejek.cojdj
输出
.xxx-xxxx.xxxx-xxxx
.xxxx.xxxx
'xic.aco-eiopw-ejek.cojdj'
我尝试使用sed "s/^\(.* \)\(.*\.\)\(.* \)/\'1\2\3'/g"
它它给出以下输出:
'1class.name_4 #id '
'1class.name_4 '
....
解决方案
你可以试试这个:
sed -E "s/(\S+\.\S*)/'\1'/g" file
.class 'class.name' 'class.name_1' and 'class.name_2' .class 'class.name_3' 'class.name_4' #id
如果您想忽略以#
sed -E "/^[^#]/s/(\S+\.\S*)/'\1'/g" file
编辑解决方法以处理已引用的单词。
sed -E "/^[^#]/s/(\S+\.\S*)/'\1'/g;s/''/'/g" file
.class 'xyz.com' 'class.name_1' and 'xxx.co' .class 'class.man_3' 'abc.name_4' #id
没有 -E 选项。
sed "/^[^#]/s/\(\S+\.\S*\)/'\1'/g;s/''/'/g" file
推荐阅读
- python - Django:在通用视图中选择模型的下拉菜单
- angular - 谷歌地图 API 密钥错误 - Angular - ApiProjectMapError
- css - 远程桌面无法正确加载 css
- android - 带有 SupervisorJob 的协程 - 取消行为
- odoo - 如何在智能按钮的域操作中获得计算字段的值
- php - phpdesktop-chrome-57-php-7.13-rc 中的 Laravel 响应中的响应标头状态代码无效
- google-cloud-platform - 使用自定义公共 log4j 记录器的 Stackdriver 日志记录实现
- c++ - Visual Studio 的“添加引用”实际上是做什么的?
- tensorflow - Tensorflow:不同时期的训练速度和 CPU 使用率
- c++ - MFC编程中,BEGIN_MESSAGE_MAP、END_MESSAGE_MAP可以为空吗?