In the process of converting a blog from WordPress to Hugo, I find that I need to do a global search and replace for tags to convert them to a list of strings.
Currently I have something like this:
tags: owl, owl2, rdfs, rdf, snippets, vscode, visual studio code
But I need something like this:
tags: ["owl", "owl2", "rdfs", "rdf", "snippets", "vscode", "visual studio code"]
I have a variety of editors such as VSCode, VS22, Neovim, Rider etc. at my disposal as well as sed, gawk etc, so any solution will do.
CodePudding user response:
To find all these with such a pattern: ^(tags: )|(, )|$.
Then the expected result for a given string can be achieved in 3 steps using VSCode:
- Search for a string
tags:(note there is a space) usingcommand F/cntrl Fand to aReplacefield add a stringtags: [". - Search for
,(note there is a space) and replace it with", ". - Depending on what's at the end of the line search for
$or\n(in a search dialog select Use Regular Expression option) and replace it with"].
CodePudding user response:
I would harness GNU sed for this task following way, let file.txt content be
tags: owl, owl2, rdfs, rdf, snippets, vscode, visual studio code
then
sed -e 's/ /["/' -e 's/$/"]/' -e 's/, /", "/g' file.txt
gives output
tags:["owl", "owl2", "rdfs", "rdf", "snippets", "vscode", "visual studio code"]
Explanation: I give three instructions
- replace space using
["once (i.e. it will affect only first space) - replace end of line using
"](i.e. append"]) - replace
,using", "globally (i.e. it wil affect all,)
(tested in GNU sed 4.7)
