LoginSignup
2

More than 5 years have passed since last update.

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

Posted at

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

おしまい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2