fish shell とBSD sed とタブ文字の入力

More than 1 year has passed since last update.

fish shell 、便利なんだけど時々落とし穴があったりするのでBash に戻ろうかと思っている今日この頃。


やりたいこと

行末にタブのついたちょっとキモいTSVファイル(タブ区切りのテキストファイル)があり、この行末のタブを除去したい。


問題点

macOSに標準搭載されているsedで行末のタブを取り除きたい。しかし、このBSD版のsed\tという入力に対応していない。

残念なことに、fish shell 環境ではBashと同じようにCtrl+vを押した後に「TAB」キーを押してTABそのものを入力するという方法は使えない。


対応

拡張正規表現(-Eオプション)でタブに限らず行末のホワイトスペース文字を除去すればいいのかもしれないが、GitHubのバグトラッカーに解決策があったのでその通りにする。

How to insert a literal tab character? · Issue #2478 · fish-shell/fish-shell · GitHub

どうするかというと、タブの前後で区切ってクォートする。何を言っているのかわからないと思うが、fish shell では動く。

> sed -i -e  's/'\t'$//' uggly.tsv

> はプロンプト記号。

タブが展開され、かつシングルクォートも展開されてちゃんと一つの文字列としてsedに渡されている模様。

もちろん別の解決策としてGNU sed をインストールしてもいいと思う。

おしまい。