疑問メモ: sedのマッチ

社長以下同僚の皆さんが息を吸うようにsedを使っていてカッコいいので自分も覚えようと思って

これを上からやってたんだけど、Using & as the matched stringでさっそく意味がわからない。

なお、リンク先では置き換え文字に「&」を使っているけど、特定の文字にした方が分かりやすそうなので、ここでは「x」に置き換えることにする。

$ echo "123 abc" | sed 's/[0-9]/x/'
x23 abc

わかる。

$ echo "123 abc" | sed 's/[0-9]*/x/'
x abc

わかる。

$ echo "abc 123" | sed 's/[0-9]/x/'
abc x23

うんうん。

echo "abc 123" | sed 's/[0-9]*/x/'
xabc 123

ファッ!?

$ echo "abc 123" | sed 's/[0-9][0-9]*/x/'
abc x

お、おぅ。

$ echo "abc 123" | sed 's/ [0-9]*/ x/'
abc x

これはわかる。「スペース123」とマッチしている。

結局「The first match for '[0-9]*' is the first character on the line, as this matches zero or more numbers. So if the input was "abc 123" the output would be unchanged (well, except for a space before the letters)」がよくわかってないなー。先に進もう。