複数行の標準入力を受けて、フィルタ処理するワンライナーです。
PerlやRubyなら、-nオプションや-pオプションで、全行処理ができるので簡単です。ただし、改行は取り除いておく必要があります。
Perl
takk@deb9:~$ seq 10 | perl -ne 'chomp;print"[$_]\n"' [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] takk@deb9:~$
Ruby
驚くことにオプションがPerlと同じ、$_は暗黙のgetsで受けた文字列ですが、クォート中に書けないようですので、+で結合しています。
takk@deb9:~$ seq 10 | ruby -ne 'chomp;puts "["+$_+"]"' [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] takk@deb9:~$
Python
Pythonはなかなか辛いものがありますね。PerlやRubyのような-nオプションがないので、スクリプト中でforで回すしかないです。また標準入力読み込みのためsys.stdinを使うのでimportが必要になります。しかしimport sys;と書くとforに続かず。仕方なく改行しました。ワンライナーになりませんでした。
takk@deb9:~$ seq 10 | python3 -c 'import sys for line in sys.stdin:print("["+line.strip()+"]")' [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] takk@deb9:~$
まあPythonの用途としてワンライナー書いてはいけないのかもしれません。コマンドの達人になりたい私としては、Pythonでもワンライナー書きたいのですが。
コメント