FizzBuzz (BSD版 sed)
$ seq 1 100 \ | sed -e ':L' -e 'n;n;n;n;s/[0-9]*/Buzz/;n;bL' | sed -e ':L' -e 'n;n;s/[0-9]*/Fizz/;n;bL'
GNU 版みたいに 5~5s/[0-9]*/Buzz/; 3~3s/[0-9]*/Fizz/
とは書けないので、n
コマンドを重ねる。
1行目は暗黙に読み込むので、置換後にもう1回読ませることで帳尻を合わせている。
行を連結する
(1) paste
をつかう。
-d
オプションでセパレータ文字を指示できる。NUL 文字を指定すればセパレータはなしになる。
$ seq 1 10 | paste -sd, - 1,2,3,4,5,6,7,8,9,10 $ seq 1 10 | paste -sd$'\0' - 12345678910
(2) sed
をつかう。
paste
とちがって、セパレータは任意の文字列を使うことができる。
BSD sed の場合、";" の扱いが微妙なため、コマンドごとに -e
で区切る。
$ seq 1 10 | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/XXX/g' 1XXX2XXX3XXX4XXX5XXX6XXX7XXX8XXX9XXX10 $ seq 1 10 | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n//g' 12345678910