【问题标题】:Sed replace string with whitespacessed 用空格替换字符串
【发布时间】:2016-12-16 17:10:10
【问题描述】:

我有一个格式如下的字符串:

{u city : u Zurich , u name : u Hauptbahnhof , u address : u Test address, C106, Bahnhofsstrasse }

我需要删除所有" u "(带空格)并用换行符替换", u "(带空格),但我不知道该怎么做。

sed 可以吗?

输出应该是这样的

{city :Zurich 
name :Hauptbahnhof 
address :Test address, C106, Bahnhofsstrasse }

谢谢大家

【问题讨论】:

  • 你从哪里得到的字符串?对我来说,这似乎是从 Python 创建 JSON 的尝试,如果是这样,请修复您的 Python 代码。
  • 它来自一个已更改的 json 输出,但不幸的是我不得不这样使用它

标签: bash replace sed


【解决方案1】:

以下似乎可行(有一些空白差异):

's/, u /\n/g;s/\bu //g'

即首先将所有", u " 替换为换行符,然后删除所有u,其中u 前面没有单词字符。

请注意,输出不是有效的 JSON。

【讨论】:

  • 这真的很脆弱,因为任何以u 结尾的词都会将其删除。
  • @andlrc:已修复。
  • 我收到错误“未终止的`s'命令”我使用 sed -e 并在管道后使用它,也许这有帮助..
  • @Damon:请显示整行。另外,什么操作系统和 sed 版本?
  • 猫筒仓_json | sed -e 's/, u /\n/g;s/\bu //g' RHEL 6.8 GNU sed 版本 4.2.1
【解决方案2】:

使用perl 命令行替换如下,使用\b 标签匹配精确的单词,而不是与其他字符串混淆。

perl -pe 's/\bu \b//g;' -pe 's/\b , \b/\n/g;' file
{city : Zurich
name : Hauptbahnhof
address : Test address, C106, Bahnhofsstrasse }

正如其他人所指出的,如果它是损坏的JSON,请使用jq 或其他方法来修复它。

【讨论】:

  • 与上述相同的问题我得到错误“未终止的`s'命令”我必须使用这样的字符串并且输出不需要是json
  • 我为您的示例使用了一个 tmp 文件来检查它是否有效
  • .. 我的错误我忘了删除脚本中的 sed 语句,您的解决方案完美运行。
  • 是的,很抱歉我给了他解决方案,但他的工作也很有效,他先提出来,但再次感谢
猜你喜欢
  • 1970-01-01
  • 2014-09-05
  • 2019-06-07
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多