我想YAML
用单引号将所有数据包装在一个大文件中。我试过了sed
,但是没有用:
sed "s/\(.*: \)\(.*\)/\1'\2'/" <data.yml >datanew.yml
这需要这样的行:
location_id: 25
street:
text: This is text: it contains colons
并产生如下代码:
' location_id: '25
' street: '
' text: This is text: 'it contains colons
...但是我希望它们看起来像:
location_id: '25'
street: ''
text: 'This is text: it contains colons'
这可能在sed
(或awk
或perl
或...)中吗?根据我的研究,似乎sed
第一个冒号匹配贪心可能会遇到麻烦。我正在运行Ubuntu 14.04。
附加信息
注意YAML
具有可选的前导空格,令牌,冒号和行中的其他所有内容(可能包括一个或多个其他冒号),所有这些都需要用引号引起来。
您可以使用以上三行进行测试。
更多的
谢谢大家的建议。我假设其中大多数人确实在工作,但对我而言却不是。这是我的终端使用建议的模式之一的快照。不幸的是,他们都以大致相同的方式对我失败。
更令人沮丧的是,当我打开文件vim
并运行搜索并以相同的模式替换文件时,它可以完美运行。我试图在整个文件中使用该技术,但vim
对4M线不满意。
我sed
莫名其妙地坏了吗?
此正则表达式:
^\s*([^:]+)(:\s)(.*?)\s*$
做你想要的。工作演示
用Perl表示最容易。
鉴于:
$ echo "$tgt"
location_id: 25
street:
text: This is text: it contains colons
在Perl中:
$ echo "$tgt" | perl -lne "print if s/^\s*([^:]+)(:\s)(.*?)\s*$/\1\2'\3'/"
location_id: '25'
street: ''
text: 'This is text: it contains colons'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句