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 をインストールしてもいいと思う。
おしまい。