標準入力を読み取って翻訳(を支援)するやつを作りたかった

この記事は、

mimikun Advent Calendar 2019 5日目

の記事です。

#みみくんメモ

環境はmacOS, Endeavour OSです。

やりたいこと

こういうファイルがあったとする

test.txt:

# I am mimikun. I'm
# deaf. I interest Disri
# buted Social Network.

ほしい結果:

I am mimikun. I'm deaf. I interest Disributed Social Network.
  1. 先頭の#を取る
  2. 最終行の改行を削除し、空白に置き換える
  3. ペーストボードに貼り付ける
  4. (できれば)Google翻訳APIに送る

以下試行錯誤の記録

これはsedを使えばできそう

僕は雰囲気でLinux(と, macOS)を使っているためsedの使い方がわからなかった。 とりあえずman sedしてもmanがありませんと出てくるだけだった。 macOSだと出ない, Linuxだと出る(Arch Linuxで確認)

調べたところinfo sedすれば出てくるらしい。 情報元: https://linux.die.net/man/1/sed

infoコマンドはemacsライクな操作感覚となる。 情報元: http://x68000.q-e-d.net/~68user/unix/pickup?info#prgmemo-info-basic

僕はvimmerなのでviライクに操作したいと考えた。

info --vi-keys でviライクに操作できるらしい。

manが効かないのは, macOSはBSD派生なので, それ関係だろう…

> sed 's/# //' test.yaml
I am mimikun. I'm
deaf. I interest Disri
buted Social Network.

いい感じ。

次は改行を取る。

改行はawk {printf $0}で削除できる。

情報元: <https://it-ojisan.tokyo/awk-delete-newline-code/

> cat test.yaml | awk {printf $0}
# I am mimikun. I'm# deaf. I interest Disri# buted Social Network.

いい感じ。

> cat test.yaml  | awk '{printf $0}' | sed 's/# //' 
I am mimikun. I'm# deaf. I interest Disri# buted Social Network.

先頭行の#s/xxx//でいいが, ほかはそうもいかない。どうしたものか…

試行錯誤1:

> cat test.yaml  | sed 's/# //g' | awk '{printf $0}'
I am mimikun. I'mdeaf. I interest Disributed Social Network.

試行錯誤2:

> cat test.yaml  | sed 's/# //' | sed 's/$/ /' |awk '{printf $0}'
I am mimikun. I'm deaf. I interest Disri buted Social Network.

試行錯誤3:

> gsed -e 's/\. /\n/g' test.yaml
# I am mimikun
I'm
# deaf
I interest Disri
# buted Social Network.

結局どうしたか

試行錯誤2をベースに手でシコシコ直していくことにしました…

> brew install gnu-sed		# gnu-sedを使う
> cat test.yaml  | gsed 's/# //' | gsed 's/$/ /' | awk '{printf $0}'
I am mimikun. I'm deaf. I interest Disri buted Social Network.

手でシコシコ直すのはここでいうとDisri butedの部分です。

この問題をいい感じに解決してくれる方法をご存知のかたは@[email protected],jpに伝えてくれると嬉しいです。