https://buttondown.email/hillelwayne/archive/why-do-regexes-use-and-as-line-anchors/
Last week I fell into a bit of a rabbit hole: why do regular expressions use $ and ^ as line anchors?1
This talk brings up that they first appeared in Ken Thompson's port of the QED text editor. In his manual he writes: b) "^" is a regular expression which matches character at the beginning of a line.
c) "$" is a regular expression which matches character before the character (usually at the end of a line)
QED was the precursor to ed, which was instrumental in popularizing regexes, so a lot of its design choices stuck.
Okay, but then why did Ken Thompson choose those characters?
(Score: 3, Interesting) by Rosco P. Coltrane on Wednesday March 27 2024, @10:00PM (8 children)
His mind will be blown when he realizes ^ and $ move the cursor to the beginning and the end of the line too.
(Score: 4, Insightful) by janrinok on Wednesday March 27 2024, @10:46PM (7 children)
The same question arises - why did they choose those characters? It all seems to go back to the same origin. They were the only characters available on teletypes which was a primary interface device when I started in the late 70s.
I am not interested in knowing who people are or where they live. My interest starts and stops at our servers.
(Score: 5, Interesting) by Rosco P. Coltrane on Wednesday March 27 2024, @11:00PM (2 children)
I wasn't answering the question, just pointing out that whatever weird choices people of yesteryear made for whatever reason still echo in software of today.
Vi of course is the next evolutionary step after ed, so it's normal that is uses ^and $ for the same purpose as ed.
It's just that... Think about it: you can install vim and any modern system today - and I do mean ANY system: there's a port of vim for every OS known to man - and you can still hit ^and $ for quick navigation.
I bet Ken Thompson picked those characters on a whim. I pick command and command line arguments on a whim too when I write utilities at my company, and years down the line, they've turned into a sort of de-facto "standard" within my company. It never ceases to amaze me.
Similarly, I bet Ken Thompson never ceases to be amazed that his split-second decisions of decades ago are used far and wide all over the world, on every OS, by millions of people, so long after he made those split-second decisions.
Still, whatever the reason, the fact is that Unix tools are very consistent. I learned those conventions at school and I still use them today, only a few years away from retirement. I would argue that this is the ultimate user-friendliness - and as the saying goes, Unix is very user-friendly, it's just very particular with which friends it chooses 🙂
(Score: 4, Informative) by KritonK on Thursday March 28 2024, @06:40AM (1 child)
Although I do use $ to go to the end of the line, I use 0 to go to the beginning of the line. It's much easier to type.
(Score: 4, Informative) by Geoff Clare on Friday March 29 2024, @11:03AM
They are actually slightly different. If the line is indented, 0 goes to the very beginning but ^ goes to the first character after the indent.
(Score: 2) by martyb on Wednesday March 27 2024, @11:11PM (3 children)
I can vouch for that! I learned to program using a (60?) column, continuous feed output (having 500 lines? inches?).
Earplug were optional, but recommended! Then again, the computer was a multiprocessing, multi-user PDP/8E having ~24KB of *core* memory!
Wit is intellect, dancing.
(Score: 4, Funny) by janrinok on Wednesday March 27 2024, @11:22PM
I am not interested in knowing who people are or where they live. My interest starts and stops at our servers.
(Score: 4, Funny) by Rosco P. Coltrane on Wednesday March 27 2024, @11:44PM (1 child)
You kids had it easy. When I learned programming, we had to punch the cards with a hammer and a chisel!
(Score: 2) by turgid on Thursday March 28 2024, @09:43PM
In my day, we had Hovis.
I refuse to engage in a battle of wits with an unarmed opponent [wikipedia.org].