As a brief note about the Linux/Unix sed
command, today I learned how to append multiple lines of text to an HTML (or XML) file on macOS. The short answer is that I created a sed
commands file named changes.sed with these contents:
/<head>/ a\
<!-- Global site tag (gtag.js) - Google Analytics --> \
<script> \
window.dataLayer = window.dataLayer || []; \
function gtag(){dataLayer.push(arguments);} \
gtag('js', new Date()); \
</script>
That sed
command can be read as, “When you find the <head>
tag, append the following text after it.”
Once you have that file you just need to run it with sed
on the file (or files) you want to edit. I just edited a bunch of HTML files with this little shell script:
for i in `ls *html`
do
echo "working on $i ..."
sed -f changes.sed < $i > ${i}.tmp
mv ${i}.tmp $i
done
I’m sure there are other/better ways to run that sed
script, but hey, it works.
An important part of the solution is knowing that you have to add the backslash character at the end of each line that you want to append. If you don’t do that you’ll get an “invalid command code” error when you run the script. As it says in O’Reilly’s sed & awk book:
“To input multiple lines of text, each successive line must end with a backslash, with the exception of the very last line.”
In summary, if you ever need to append multiple lines of text with sed
on macOS, I hope this little example is helpful. (The same command should work on Linux and Unix systems.)