linux - 使用 sed 替换前后有非字母数字字符的字符串
问题描述
我想使用 sed 命令,以便用其他字符串替换特定字符串。但是,我想跳过它们之前的最后一个字符或它们之后的第一个字符是字母数字的字符串出现。这意味着我只想替换这些字符串,前提是它之前和之后都有非字母数字字符。
我尝试了很多方法并在网上搜索,但没有结果。
例如:字符串是:
aaaBCD] BCD1 [BCD] BCD.
如果我尝试用 交换BCD
,BBB
我只想BCD
替换最后两个。
解决方案
您可以使用\<
and\>
作为锚点:
sed 's/\<BCD\>/BBB/'
但是,这不考虑下划线。所以将其增加到
sed -e 's/\<BCD\>/BBB/' -e 's/_BCD\>/_BBB/' -e 's/\<BCD_/BBB_/' -e 's/_BCD_/_BBB_/'
编辑:您实际上可以使用扩展正则表达式的OR以及像 Jay jargot 在他的回答中所做的模式子字符串将所有命令组合成一个命令。使用-E切换到 sed启用扩展正则表达式:
sed -E 's/((_|\<))BCD((_|\>))/\1BBB\3/g'
顺便说一句,在这里你可以找到关于 sed、awk、正则表达式的不错的教程......
推荐阅读
- 3d - 我有一些 .bob 文件格式的 3d 资产。有什么方法可以打开它们吗?
- docker - 为什么在 jwilder/nginx-proxy 下运行 laravel 应用程序出现 503 Service Temporarily Unavailable 错误?
- flutter - 哪种是测试 Flutter 应用程序的最佳方法
- wordpress - Woocommerce 产品图片未显示在 Facebook 上
- javascript - 如何使用 Firebase JS SDK 版本 9 通过 ID 查找文档?
- javascript - React Native 没有显示更新的数组
- postgresql - 在 sql 中使用 coalesce 函数返回零个记录而不显示任何列值为空
- javascript - 使用标准的js类在vue js中创建实例
- neo4j - Neo4J 检查用户是否关注我
- python - 通过信号/槽连接传递的属性失去其类型