热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

具有同步和顺序替换的sed

如何解决《具有同步和顺序替换的sed》经验,为你挑选了1个好方法。

我不确定这是否可以在sed(或awk或任何bash工具)中执行我想要的操作:

我想创建一个脚本替换: )字符串by ) :by .这可以通过sed轻松完成:

echo "test : )" | sed 's/: )//g'
echo "test ) :" | sed 's/) ://g'

不幸的是,有时我会有这样的字符串:

I'm happy : ) : ) : )
I'm sad ) : ) : ) :

在这种情况下,输出应该是:

I'm happy   
I'm sad   

但通过结合上面的两个命令:

echo "I'm happy : ) : ) : )" | sed 's/: )//g' | sed 's/) ://g'
echo "I'm sad ) : ) : ) :" | sed 's/: )//g' | sed 's/) ://g'

我会得到:

I'm happy   
I'm sad )   :

解决这个问题的方法是通过从左到右处理字符串来并行地进行两个替换.我尝试使用这样的东西:sed 's/a/b/g;s/c/d/g'但是替换只是一个接一个地完成,并没有解决问题.



1> Ed Morton..:

使用GNU awk为第3个arg匹配():

$ cat script1.awk
BEGIN {
    map[": )"] = ""
    map[") :"] = ""
}
{
    while ( match($0,/(.*)(: \)|\) :)(.*)/,a) ) {
        $0 = a[1] map[a[2]] a[3]
    }
    print
}

$ awk -f script1.awk file
I'm happy   
I'm sad   

有任何awk:

$ cat script2.awk
BEGIN {
    map[": )"] = ""
    map[") :"] = ""
}
{
    while ( match($0,/: \)|\) :/) ) {
        $0 = substr($0,1,RSTART-1) map[substr($0,RSTART,RLENGTH)] substr($0,RSTART+RLENGTH)
    }
    print
}

$ awk -f script2.awk file
I'm happy   
I'm sad   

虽然在这种情况下两种方法都产生相同的输出,但第一种方法实际上是从字符串的末尾到前导的礼貌,.*而第二种方法从前到后工作.您可以通过此测试看到:

$ echo ': ) :' | awk -f script1.awk
: 

$ echo ': ) :' | awk -f script2.awk
 :

你可以用任何带有调整功能的awk做一个从前到后的传递,但我不认为这是你真正想要的.


编辑以从地图构建正则表达式:

$ cat tst.awk
BEGIN {
    map[": )"] = ""
    map[") :"] = ""
    for (emoji in map) {
        gsub(/[^^]/,"[&]",emoji)
        gsub(/\^/,"\\^",emoji)
        emojis = (emojis == "" ? "" : emojis "|") emoji
    }
}
{
    while ( match($0,emojis) ) {
        $0 = substr($0,1,RSTART-1) map[substr($0,RSTART,RLENGTH)] substr($0,RSTART+RLENGTH)
    }
    print
}

$ awk -f tst.awk file
I'm happy   
I'm sad   


当然,我刚刚添加了一个版本.
推荐阅读
  • 10分钟带你搞定 Linux awk命令
    欢迎加入JackTian技术交流群!CSDN海量资源免费下载!简介awk是一个强大的文本分析工具,相对于grep的查找,se ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • SRM 553:深入解析供应链管理系统的最新进展与应用本文详细探讨了供应链管理系统(SCM)的最新发展及其在实际应用中的影响。通过对当前技术趋势的分析,文章揭示了 SCM 在提高效率、降低成本和增强透明度方面的关键作用。此外,还介绍了几种创新的 SCM 解决方案,如区块链技术和人工智能的应用,以及这些技术如何帮助企业更好地应对市场变化和挑战。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 本文深入解析了Python在处理HTML过滤时的实现方法及其应用场景。通过具体实例,详细介绍了如何利用Python代码去除HTML字符串中的标签和其他无关信息,确保内容的纯净与安全。此外,文章还探讨了该技术在网页抓取、数据清洗等领域的实际应用,为开发者提供了宝贵的参考。 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • 图像拼接技术深入解析:基于OpenCV 3.4的Stitching模块源码分析(下篇)
    本文继续深入探讨图像拼接技术,特别是在OpenCV 3.4的Stitching模块中的源码实现。通过与VLFeat的SIFT实现进行对比,详细分析了OpenCV在图像特征提取、匹配及拼接过程中的关键算法和技术细节,为读者提供了全面的技术解析和实践指导。 ... [详细]
  • zabbix 自定义监控
    配置自定义监控,我们需要配置监控项的key,和监控项返回的value添加自定义监控key的格式,在配置文件中添加UserParameter ... [详细]
  • Linux提权之suid篇
    Linux提权之suid篇不知攻,焉知防一个在安服路上摸索的大三生,记录平时学习笔记suid前言:1.只有可以执行的二进制程序文件才 ... [详细]
  • 本文探讨了在Python中使用序列号字符串进行高效模式替换的方法。具体而言,通过将HTML标签中的`&`替换为`{n}`,并生成形如`[tag, {n}]`的哈希原始字符串。示例字符串为:“这是一个字符串。这是另一部分。”该方法能够有效提升替换操作的性能和可读性。 ... [详细]
author-avatar
朱玉龙1977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有