【问题标题】:sed replace every word with single quotes with double quotessed 用双引号用单引号替换每个单词
【发布时间】:2017-10-03 10:14:53
【问题描述】:

我正在尝试解析带单引号的文件,并希望将其更改为双引号。

样本数据:

{'data':        ['my',
'my_other',
'my_other',
'my_other',
'This could 'happen' <- and this ones i want to keep',
],
'name': 'MyName'},
'data2': {'type': 'x86_64',
'name': 'This',
'type': 'That',
'others': 'bla bla 'bla' <- keep this ones too',
'version': '21237821972'}}}

期望的输出:

{"data":        ["my",
"my_other",
"my_other",
"my_other",
"This could 'happen' <- and this ones i want to keep"
],
"name": "MyName"},
"data2": {"type": "x86_64",
"name": "This",
"type": "That",
"others": "bla bla 'bla' <- keep this ones too",
"version": "21237821972"}}}

我已经尝试过用 sed 做一些正则表达式,但很不幸。 我明白为什么这对我不起作用,只是不知道如何进一步获取我想要的数据。

sed -E -e "s/( |\{|\[)'(.*)'(\:|,|\]|\})/\1\"\2\"\3/g"

干杯,

【问题讨论】:

  • 您要解决的最终目标是什么?还有用python可以吗?
  • 如果这是JSON文件,推荐使用jq工具(或)使用python json模块
  • 这是一些我想要转换为 json 的 python 字典和列表(带双引号)
  • 有什么方法可以区分保留哪些引号和替换哪些引号,因为即使您采用保持句子中间引号完整的逻辑,我也会看到引号所在的行更改了您想要的输出。
  • 不,我无法区分它们。对不起。

标签: bash sed quotes


【解决方案1】:

我不是 jq 方面的专家,因此根据 OP 的问题试图在 awk 中回答以将 ' 替换为 " 这里。

awk -v s1="\"" '!/This could/ && !/others/{gsub(/\047/,s1) } /This could/ || /others/{gsub(/\047/,s1,$1)} 1'  Input_file

输出如下。

{"data":        ["my",
"my_other",
"my_other",
"my_other",
"This could 'happen' <- and this ones i want to keep',
],
"name": "MyName"},
"data2": {"type": "x86_64",
"name": "This",
"type": "That",
"others": 'bla bla 'bla' <- keep this ones too',
"version": "21237821972"}}}

【讨论】:

  • 几乎做到了,但我想将单引号保留在字符串中(那些说我想保留的)。提前致谢,
  • “'单'引号中的一些文本”这样 :) 也许我解释得很糟糕。对不起
  • @RicardoRibeiro,所以无论哪个字符串是您想要保留引号的字符串?任何特定的字符串或任何识别它们的方法?请务必让我知道。
  • 不,无法识别它们。对不起。这只是一些示例文本。
  • @RicardoRibeiro,怎么会,应该有一些具体的文字?一些特定的模式,一些特定的地方?否则,如果这些东西不存在,如何编写程序?还有你想让我在哪里修复我的代码?
【解决方案2】:

我们知道‘sed’命令可以搜索一个模式并且可以用用户提供的新模式替换那个模式

例如 sed “s/pattern1/pattern2/g” 文件名.txt

现在“sed”命令将搜索 pattern1,如果找到它将替换为 pattern2

根据您的要求,您只需要应用此规则。见下文

首先 sed "s/^\'/\"/g" 你的文件

这将在文件中搜索每个带有字符'的换行符并替换为“

下一个要求是搜索模式':并替换为“:”

所以再添加一个条件,用 ; 分隔

sed "s/^\'/\"/g; s/\':/\":/g" 你的文件

只要按照这个算法,直到你达到你的要求

最终应该是这样的:-

sed "s/^\'/\"/g; s/\':/\":/g;s/{\'/{\"/g;s/\[\'/\[\"/g;s/\',/\",/g; s/\'}/\"}/g;s/:\'/:\"/g;" yourfile > newfil

(如果上面的命令给你错误,只需使用最开始的命令)

终于 mv newfile 你的文件

【讨论】:

  • “一开始就使用命令”——不要让人们从图像中输入文本,使用实际文本。
  • 这是命令 sed "s/^\'/\"/g; s/\':/\":/g;s/{\'/{\"/g;s/[\'/[\"/g;s/\',/\",/g;s/ \'}/\"}/g;s/: \'/: \"/g;" 但是当我粘贴它时,它会删除一些字符。我认为任何人都不会很难看到图像并且在命令提示符下输入。
猜你喜欢
  • 1970-01-01
  • 2022-01-27
  • 2016-08-10
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 2011-06-19
  • 2018-05-12
  • 1970-01-01
相关资源
最近更新 更多