tse 0.0.5リリース
久しぶりに tse をリリースした。遅ればせながら Python3で動くように修正し、いくつかオブションを追加した。
tse は sed や awk のように Python をコマンドラインから実行するためのツールで、詳しくは 以前書いた解説 を参照していただきたい。
今回のリリースでは、実行する Python スクリプトを、 {{
と }}
を使ってインデントを記述できるようにしてみた。
tse -p '' -a 'if L1:{{for c in L2:{{print(c)}}else:{{print(L3)}}}}else:{{print(L4)}}'
のようなスクリプトは、
if L1: for c in L2: print(c) else: print(L3) else: print(L4)
に変換される。tse のコマンドラインパーサは
Pythonの構文を理解しており、文字列定数やコメント中に {{}}
があっても無視するようになっている。
また、--inplace
引数に、ファイルの拡張子を指定すると、出力は標準出力ではなく、入力ファイルを上書きするようになった。元の入力ファイルは、--inplace
引数で指定した拡張子をつけたファイル名に保存される。
Python3対応もできたので、ずいぶん出番が増えてきた。最近では以下の様な使い方をしていた。
全角・半角文字列を正規化
{.sourceCode .sh} $ echo '123アイウエオ' | tse -ms unicodedata -s '.*' 'print(normalize("NFKC", L))'
スペース区切りのテキストからcsvに変換
{.sourceCode .sh} $ tse -m csv -b 'o=csv.writer(sys.stdout)' -s '.*' 'o.writerow((L1,L2,L3))' < ~/C.txt
gitのユーザ名をコミット数順に表示
{.sourceCode .sh} $ git log|tse -ms collections -b 'c=Counter()' -s '^Author: (.*)' 'c[S1] +=1' -e 'for a, n in c.items():print(n, a)'|sort -g
ファイルの文字コード変換
{.sourceCode .sh} $ tse --inplace='.bak' -ie euc-jp -oe shiftjis -s '.*' 'print(L)' -- a.txt
特定の文字列を含むプロセスを kill
{.sourceCode .sh} $ ps -a|tse -s python 'print(L.split()[0])'|xargs sudo kill