{"id":1360,"date":"2017-03-20T20:07:21","date_gmt":"2017-03-20T14:37:21","guid":{"rendered":"https:\/\/www.wikitechy.com\/technology\/?p=1360"},"modified":"2017-03-29T11:29:42","modified_gmt":"2017-03-29T05:59:42","slug":"can-replace-string-files","status":"publish","type":"post","link":"https:\/\/www.wikitechy.com\/technology\/can-replace-string-files\/","title":{"rendered":"How can I replace a string in a file(s)"},"content":{"rendered":"<p><span style=\"color: #ff6600;\"><strong>Replacing strings in files based on certain search criteria is a very common task. How can I<\/strong><\/span><\/p>\n<ul>\n<li>replace string foo with bar in all files in the current directory?<\/li>\n<li>do the same recursively for sub directories?<\/li>\n<li>replace only if the file name matches another string?<\/li>\n<li>replace only if the string is found in a certain context?<\/li>\n<li>replace if the string is on a certain line number?<\/li>\n<li>replace multiple strings with the same replacement<\/li>\n<li>replace multiple strings with different replacements<\/li>\n<\/ul>\n<p><label class=\"label label-info\">SOLUTION 1:<\/label><\/p>\n<p>Replacing all occurrences of one string with another in all files in the current directory:<\/p>\n<ul>\n<li>These are for cases where you\u00a0know\u00a0that the directory contains only regular files and that you want to process all non-hidden files. If that is not the case, use the another approaches .<\/li>\n<li>All<b>\u00a0<\/b><b>sed<\/b>\u00a0solutions in this answer assume GNU\u00a0sed. If using FreeBSD or OS\/X, replace\u00a0<b>&#8211;<\/b><b>i<\/b>\u00a0with\u00a0-i &#8221;. Also note that the use of the\u00a0-i\u00a0switch with any version of\u00a0<b>sed<\/b>\u00a0has certain <b>filesystem<\/b>\u00a0security implications\u00a0and is inadvisable in any script which you plan to distribute in any way.<\/li>\n<\/ul>\n<p><b>Non <\/b><b>recursive<\/b>, files in this directory only:<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -i -- &#039;s\/foo\/bar\/g&#039; * <br\/>          perl -i -pe &#039;s\/foo\/bar\/g&#039; .\/* <\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<p>(the\u00a0perl\u00a0one will fail for file names ending in\u00a0|\u00a0or space)).<\/p>\n<p><b>Recursive<\/b>, regular files <b>(including hidden ones<\/b>) in this and all subdirectories<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">find . -type f -exec sed -i &#039;s\/foo\/bar\/g&#039; {} +<\/code><\/pre> <\/div>\n<p>If you are using zsh:<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -i -- &#039;s\/foo\/bar\/g&#039; **\/*(D.)<\/code><\/pre> <\/div>\n<p>(may fail if the list is too big, see\u00a0zargs\u00a0to work around).<\/p>\n<p>Bash can&#8217;t check directly for regular files, a loop is needed (braces avoid setting the options globally):<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">( shopt -s globstar dotglob;<br\/>       for file in **; do<br\/>       if [[ -f $file ]] &amp;&amp; [[ -w $file ]]; then <br\/>        sed -i -- &#039;s\/foo\/bar\/g&#039; &quot;$file\u201c<br\/>        fi <br\/>        done )<\/code><\/pre> <\/div>\n<p>The files are selected when they are actual files (-f) and they are writable (-w).<\/p>\n<p><label class=\"label label-info\">SOLUTION 2:<\/label><\/p>\n<p>Replace only if the file name matches another string \/ has a specific extension \/ is of a certain type etc:<\/p>\n<p>Non-recursive, files in this directory only:<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -i -- &#039;s\/foo\/bar\/g&#039; *baz* ## all files whose name contains baz <br\/>                    sed -i -- &#039;s\/foo\/bar\/g&#039; *.baz ## files ending in .baz<\/code><\/pre> <\/div>\n<p>Recursive, regular files in this and all subdirectories<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">find . -type f -name &quot;*baz*&quot; -exec sed -i &#039;s\/foo\/bar\/g&#039; {} +<\/code><\/pre> <\/div>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">( shopt -s globstar dotglob <br\/>                           sed -i -- &#039;s\/foo\/bar\/g&#039; **baz*<br\/>                          sed -i -- &#039;s\/foo\/bar\/g&#039; **.baz <br\/>                        )<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<p>If you are using <b>zsh<\/b><b>:<\/b><\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -i -- &#039;s\/foo\/bar\/g&#039; **\/*baz*(D.) <br\/>             sed -i -- &#039;s\/foo\/bar\/g&#039; **\/*.baz(D.)<\/code><\/pre> <\/div>\n<p>The\u00a0&#8212;\u00a0serves to tell\u00a0sed\u00a0that no more flags will be given in the command line. This is\u00a0 useful to protect against file names starting with<b>\u00a0-.<\/b><\/p>\n<p>If a file is of a certain type, for example, executable (see\u00a0man find\u00a0for more options):<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">f ind . -type f -executable -exec sed -i &#039;s\/foo\/bar\/g&#039; {} +<br\/>                 zsh:<br\/>                 sed -i -- &#039;s\/foo\/bar\/g&#039; **\/*(D*)   <\/code><\/pre> <\/div>\n<p><label class=\"label label-info\">SOLUTION 3:<\/label><\/p>\n<p>Replace only if the string is found in a certain context<\/p>\n<p>Replace\u00a0foo\u00a0with\u00a0bar\u00a0only if there is a\u00a0<b>baz<\/b>\u00a0later on the same line:<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -i &#039;s\/foo\\(.*baz\\)\/bar\\1\/&#039; file<\/code><\/pre> <\/div>\n<p>In\u00a0<b>sed<\/b>, using\u00a0\\( \\)\u00a0saves whatever is in the parentheses and you can then access it with\u00a0\\1. There are many \u00a0variations of this theme, to learn more about such regular expressions,<\/p>\n<p>Replace\u00a0foo\u00a0with\u00a0bar\u00a0only if\u00a0foo\u00a0is found on the 3d column (field) of the input file (assuming whitespace-separated fields):<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">gawk -i inplace &#039;{gsub(\/foo\/,&quot;baz&quot;,$3); print}&#039; file(needs\u00a0gawk\u00a04.1.0 or newer).<br\/> <\/code><\/pre> <\/div>\n<p>For a different field just use\u00a0$N\u00a0where\u00a0N\u00a0is the number of the field of interest.<\/p>\n<p>For a different field separator (:\u00a0in this example) use<\/p>\n<p>&nbsp;<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">gawk -i inplace -F&#039;:&#039; &#039;{gsub(\/foo\/,&quot;baz&quot;,$3);print}&#039; file<\/code><\/pre> <\/div>\n<p>Another solution using\u00a0perl:<\/p>\n<p>&nbsp;<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">perl -i -ane &#039;$F[2]=~s\/foo\/baz\/g; $&quot; = &quot; &quot;; print &quot;@F\\n&quot;&#039; foo <\/code><\/pre> <\/div>\n<p>Both the\u00a0awk\u00a0and\u00a0perl\u00a0solutions will affect spacing in the file (remove the leading and trailing blanks, and convert sequences of blanks to one space character in those lines that match). For a different field, use\u00a0$F[N-1]\u00a0where\u00a0N\u00a0is the field number you want and for a different field separator use (the\u00a0$&#8221;=&#8221;:&#8221;\u00a0sets the output field separator to\u00a0:):<\/p>\n<p><b>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/b><\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">              perl -i -F&#039;:&#039; -ane &#039;$F[2]=~s\/foo\/baz\/g; $&quot;=&quot;:&quot;;print &quot;@F&quot;&#039; foo <\/code><\/pre> <\/div>\n<p>Replace\u00a0foo\u00a0with\u00a0bar\u00a0only on the 4th line:<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -i &#039;4s\/foo\/bar\/g&#039; file <br\/>                 gawk -i inplace &#039;NR==4{gsub(\/foo\/,&quot;baz&quot;)};1&#039; file <br\/>                 perl -i -pe &#039;s\/foo\/bar\/gif   $.==4&#039; file  <\/code><\/pre> <\/div>\n<p><label class=\"label label-info\">SOLUTION 4:<\/label><\/p>\n<p>Multiple replace operations: replace with different strings<\/p>\n<p>You can combine<b>\u00a0<\/b><b>sed<\/b>\u00a0commands:<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -i &#039;s\/foo\/bar\/g; s\/baz\/zab\/g; s\/Alice\/Joan\/g&#039; file<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<p>Be aware that order matters (sed &#8216;s\/foo\/bar\/g; <b>s\/bar\/<\/b><b>baz<\/b><b>\/g<\/b>&#8216;\u00a0will substitute\u00a0foo\u00a0with\u00a0<b>baz<\/b>).<\/p>\n<p><b>Perl commands:<\/b><\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">perl -i -pe &#039;s\/foo\/bar\/g; s\/baz\/zab\/g; s\/Alice\/Joan\/g&#039; file<\/code><\/pre> <\/div>\n<p>If you have a large number of patterns, it is easier to save your patterns and their replacements in a\u00a0<b>sed<\/b><b>\u00a0<\/b>script file:<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">#! \/usr\/bin\/sed -f <br\/>              s\/foo\/bar\/g<br\/>              s\/baz\/zab\/g<\/code><\/pre> <\/div>\n<p>If you have too many pattern pairs for the above to be feasible, you can read pattern pairs from a file (two space separated patterns, $pattern and $replacement, per line):<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">while read -r pattern replacement; do <br\/> sed -i &quot;s\/$pattern\/$replacement\/&quot; file <br\/> done &lt; patterns.txt<\/code><\/pre> <\/div>\n<p>That will be quite slow for long lists of patterns and large data files so you might want to read the patterns and create a\u00a0<b>sed<\/b>\u00a0script from them instead.\u00a0\u00a0 The\u00a0 following assumes a\u00a0&lt;space&gt;\u00a0delimiter separates a list of\u00a0MATCH&lt;space&gt;REPLACE\u00a0pairs occurring one-per-line in the file\u00a0<b>patterns.txt\u00a0:<\/b><\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">                  sed &#039;s| *\\([^ ]*\\) *\\([^ ]*\\).*|s\/\\1\/\\2\/g|&#039; &lt;patterns.txt | <br\/>                   sed -f- .\/editfile &gt;outfile<\/code><\/pre> <\/div>\n<ul>\n<li>The above format is largely arbitrary and, for example, doesn&#8217;t allow for a\u00a0&lt;space&gt;\u00a0in either of\u00a0MATCH\u00a0or\u00a0REPLACE.<\/li>\n<li>\u00a0if\u00a0 you can create an output stream which looks like a\u00a0sed\u00a0script, then you can source that stream as a\u00a0<b>sed<\/b>\u00a0script by specifying\u00a0<b>sed&#8217;s<\/b> script file as\u00a0&#8211;<b>stdin<\/b>.<\/li>\n<li>You can combine and concatenate multiple scripts in similar fashion:<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">SOME_PIPELINE |<br\/>                   sed -e&#039;#some expression script&#039; \\ <br\/>                  -f.\/script_file -f- \\ <br\/>                  -e\u2018#more  inline expressions&#039; \\ <br\/>                .\/actual_edit_file &gt;.\/outfile<\/code><\/pre> <\/div>\n<ul>\n<li>\u00a0A POSIX\u00a0<b>sed<\/b>\u00a0will concatenate all scripts into one in the order they appear on the command-line. None of these need end in a\u00a0\\newline.<\/li>\n<li>grep\u00a0can work the same way:<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">                       sed -e&#039;#generate a pattern list&#039; &lt;in |<br\/>                       grep -f- .\/grepped_file<\/code><\/pre> <\/div>\n<ul>\n<li>When working with fixed-strings as patterns, it is good practice to escape regular expression\u00a0metacharacters. You can do this rather easily:<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed &#039;s\/[]$&amp;^*\\.\/[]\/\\\\&amp;\/g<br\/>                    s| *\\([^ ]*\\) *\\([^ ]*\\).*|s\/\\1\/\\2\/g|<br\/>                    &#039;  &lt;patterns.txt |  <br\/>                    sed -f- .\/editfile &gt;outfile  <\/code><\/pre> <\/div>\n<p><label class=\"label label-info\">SOLUTION 5:<\/label><\/p>\n<p><strong>Multiple replace operations: replace multiple patterns with the same string<\/strong><\/p>\n<p>Replace any of\u00a0foo,\u00a0bar\u00a0or\u00a0baz\u00a0with\u00a0foobar<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">sed -Ei &#039;s\/foo|bar|baz\/foobar\/g&#039; file<\/code><\/pre> <\/div>\n<p>or\u00a0 using perl<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">perl -i -pe &#039;s\/foo|bar|baz\/foobar\/g&#039; file<\/code><\/pre> <\/div>\n<p><label class=\"label label-info\">SOLUTION 6:<\/label><\/p>\n<ul>\n<li>If you have list of files you can use,<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">replace &quot;old_string&quot; &quot;new_string&quot; -- file_name1 file_name2 file_name3 <\/code><\/pre> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Replacing strings in files based on certain search criteria is a very common task. How can I replace string foo with bar in all files in the current directory? do the same recursively for sub directories? replace only if the file name matches another string? replace only if the string is found in a certain [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[275],"tags":[2712,2718,2715,2713,2704,2706,2707,2714,2705,2719,2710,2717,2709,2716,2711,2708],"class_list":["post-1360","post","type-post","status-publish","format-standard","hentry","category-javascript","tag-and-replace-missing-values","tag-find-and-replace-in-path-exclude-test-files","tag-how-can-i-delete-everything-between-two-markers-in-a-file","tag-how-can-i-extractchange-lines-in-a-text-file-whose-data-are-separated-into-fields","tag-how-can-i-replace-a-specific-string-within-a-line-inside-a-text-file","tag-how-to-change-a-single-line-in-multiple-files","tag-how-to-modify-file-content","tag-how-to-replace-string-in-files-except-with-a-line-begins-with","tag-modify-part-of-line-if-keyword-is-found-using-sed","tag-replace-list-regex-replace-string","tag-replace-multiline-string-in-files","tag-replace-multiple-lines-with-a-string-when-the-line-numbers-are-stored-in-a-file","tag-replace-string-with-sequential-index","tag-replace-strings-in-a-file-based-on-a-list-of-strings-and-a-list-of-corresponding-replacements","tag-transpose-a-file","tag-why-wont-my-change-to-the-sshd_config-file-persist"],"_links":{"self":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/1360","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/comments?post=1360"}],"version-history":[{"count":0,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/1360\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/media?parent=1360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/categories?post=1360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/tags?post=1360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}