ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

shell

ファイルの中身をまるごとURLエンコードしたい

curl -X POST -d ... で投げるときに、ファイルの内容をエンコードする必要に見舞われた。 $ perl -MURI::Escape -E 'say uri_escape do { local $/; <STDIN> }' < file.txt [追記] -0777 オプションでまるごと読み込みができる。 $ perl -MURI::Escape -0777 -E 's</stdin>…

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 とちがって、セパ…

XXXX という文字列を含んだファイルを探すための、もうひとつのやりかた

find してからの xargs grep -n のほうが便利ではあるけど、ファイル名だけがほしい場合というのもある。 find の -exec 節は、コマンドの終了ステータスで真偽が決まる。 grep の終了ステータスはマッチすれば 0 を返すから、そのマッチしたファイルは -pri…

100行の空行を生成する

echo を 100 回実行できればよいので、yes と head で生成して、そのまま sh に丸投げする。 $ yes echo | head -100 | sh [追記] あれ、yes に空文字列をわたせばよいのでは $ yes "" | head -100

shell-command-on-region で置換する

バッファに 1 + 1 と書いておいて、2 で置換できないかと思ったのでトライ。 置換処理はむしろ外部にまかせたい。vim における '<,'>! である。 C-u M-| CMD <RET> を使えばいけそうであるが、リージョン末尾が改行でない場合に、コマンドが受け付けてくれない場</ret>…

exec-path-from-shell

ログインシェル ($SHELL) をテンポラリバッファ内で起動して、$PATH を吐き出す 吐き出した $PATH をコロンで split して exec-path に append する

m4 で画像の data-uri を埋め込む

今どき m4 かと思わなくもないけど、コマンドラインツールがあればだいたい入ってるので重宝する。 埋め込みたい画像のパスを DATA_URI マクロで囲む。 相対パスだと m4 の実行時のカレントディレクトリを見るので (たぶん) そこだけ注意 <img src="DATA_URI(image/image.png)"> 画像ファイルの mi…

ズンドコしたい (2)

こっちは入力を5つ区切りにして、それぞれが 00001 の並びになっているかどうかをチェックする。 (仕様はこちらが正しいらしい?) $ cat /dev/urandom \ | LANG=C tr -dc "01" \ | fold -w1 \ | paste -d' ' - - - - - \ | (perl -nle 'print; if ($_ eq "0 …

ズンドコしたい

ストリーム上の 0 と 1 の並びを sed に取り込んで、00001 かどうかを DFA っぽく検査する。 $ cat /dev/urandom \ | LANG=C tr -dc "01" \ | fold -w1 \ | (sed -nf dfa.sed; echo 2) \ | perl -ple 'BEGIN { @table = qw/ズン ドコ キ・ヨ・シ!/; } s/(.)…

部分集合を作るあれ

こういうのもあり? シェル芸で部分集合を全通り求める方法(別解求む) – 上田ブログ bash-3.2$ echo {{a\,,}{b\,,}{c\,,}{d\,,}} | xargs -n1 | sed -e 's/,\}/}/g' {a,b,c,d} {a,b,c} {a,b,d} {a,b} {a,c,d} {a,c} {a,d} {a} {b,c,d} {b,c} {b,d} {b} {c,…

find -exec で bash を呼び出す

内容までチェックするような、凝ったファイル検査をしたいときに、-exec 節を使いたい。 そういうときは bash の引数として _ と {} を渡せばよいようだ。 _ は $0 に埋め込ませるだけである。 $ touch empty.txt $ seq 10 > num1.txt $ seq 4 > num2.txt $ …

足し算

$ seq 1 10 | paste -sd+ - | bc 55

SVN 作業コピーのダイエットをした

プロジェクトの作業コピーの中にはもう使わないものも含まれている。 そういうファイルが何年も溜まってくると更新するだけでもディスク待ちが発生してしまう。 svn delete すればいいんだろうけど、プロジェクト的にはそういう感じでもないので、作業コピー…

echo で -n を出力する

$ /bin/echo -e '\x2d\x6e'