【问题标题】:Replace all occurrences of string which does not match a pattern in unix替换所有出现的与 unix 中的模式不匹配的字符串
【发布时间】:2016-01-26 13:36:24
【问题描述】:

我有根据特定条件替换采购订单中的双引号(制表符\管道分隔)的特定要求。源文件中的示例记录如下所示:

Record 1 : Item1|length 24.0" width 21"|Yes

Record 2 : Item2|"Length 25.0
           Width 26.0"|No

如上所示,第二条记录在描述中有一个换行符,并用双引号括起来。 我想替换所有其他字段中的双引号,不受双引号的限制,例如记录 1 的描述字段中。

我的结果应该是这样的

Record 1 : Item1|length 24.0 width 21|Yes --> Double quotes removed

Record 2 : Item2|"Length 25.0
           Width 26.0"|No --> Double quotes left as such

如何使用 sed 解决这个问题?

【问题讨论】:

  • 我使用以下命令匹配了整个描述字段:sed -e 's/\t[^\t]*"[^\t]*\t//g' file.txt。我'正在寻找仅删除匹配模式中的双引号的方法(我正在使用制表符分隔文件进行测试)

标签: regex unix sed


【解决方案1】:
$ sed 's/"\([^"]*\)"/\1/' file
Record 1 : Item1|length 24.0 width 21|Yes

Record 2 : Item2|"Length 25.0
           Width 26.0"|No

如果这不能满足您的要求,请编辑您的问题以提供更全面的示例输入和预期输出。

【讨论】:

  • 感谢您的帮助,埃德。我不能直接使用代码,而是玩了一些捕获组,最终得到了我想要的。这是我正在使用的命令:sed -e 's/\(\t[^\t]*\)"\([^\t]*\t\)/\1 \2/g' file
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 2021-10-23
  • 1970-01-01
  • 2021-01-26
  • 2018-07-03
  • 2016-09-26
  • 1970-01-01
  • 2012-07-18
相关资源
最近更新 更多