【问题标题】:How to replace before and after characters of a particular string如何替换特定字符串的前后字符
【发布时间】:2015-08-28 11:34:15
【问题描述】:

我正在使用一些 Linux 文件级操作将 SQL Server 插入转换为 MySQL 插入。 有人可以让我知道如何在一行中转换所有出现的下面

(..,CAST(0x0000722300000000 AS DateTime),..,CAST(0x0000979900C10112 AS DateTime),...)

如下图

(..,myfunc(0x0000722300000000),..,myfunc(0x0000979900C10112),...)

示例:

需要将 CAST(hexval AS DateTime) 转换为 myfunc(hexval),其中 hexval 是动态的。

$echo "(..,CAST(0x0000722300000000 AS DateTime),..,CAST(0x0000979900C10112 AS DateTime),...)" | using grep or sed or awk 

(..,myfunc(0x0000722300000000),..,myfunc(0x0000979900C10112),...)

【问题讨论】:

  • @vidhyadar 你能用更容易理解的方式阐述你的问题吗??

标签: mysql sql-server linux shell


【解决方案1】:

这个 sed 单线会有所帮助:

sed 's/CAST(\([^)]\+\) AS DateTime)/myfunc(\1)/g' file

测试:

kent$  cat f
(..,CAST(0x0000722300000000 AS DateTime),..,CAST(0x0000979900C10112 AS DateTime),...)

kent$  sed 's/CAST(\([^)]\+\) AS DateTime)/myfunc(\1)/g' f
(..,myfunc(0x0000722300000000),..,myfunc(0x0000979900C10112),...)

【讨论】:

  • @vidyadhar s/...foo.../bar/g 将用bar 替换所有...foo...。其余的东西是正则表达式。你不明白哪一部分?
  • @kent 我不明白命令中使用的 ([^)]\+) 和 \1 ..你能解释一下他们在做什么
  • @vidyadhar [^)]\+ 是一个或多个非) 字符。 \1 引用正则表达式组,即第一对 (...) 之间的匹配
猜你喜欢
  • 2014-10-29
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 2012-09-04
相关资源
最近更新 更多