2016-10-28 7 views
4

私はかなりの時間ここで検索していますが、本当に良い情報を見つけましたが、問題は全くゼロになりません。私はMac OS 10.11でsedを使ってタブ文字をパイプ文字に置き換えようとしています。これまでに私が見つけたすべての情報は、他のプラットフォームでは動作しますが、Mac OS 10.11では動作しません。私は、普通の標準的な文字を一日中置き換えて、句読点をカンマのように置き換えることができるので、sedが10.11で動作することを知っています。はい、私は\tを使ってみました。標準文字で動作します私が見つけたsedの文字列は以下の通りです:私は上記の文字列に,の代わりに\tを使用する場合Mac OS 10でsedを使用してテキストファイルのタブ文字を置き換えます。

sed -i '' -e 's/,/|/g' /Users/username/Desktop/TABs2PIPE.txt 

、それは単にファイルにすべて小文字tを置き換えます。

だから、他のマックヘッドがこれを働かせてくれて、本当に助けてくれてありがとうと思います。

答えて

1

OSX sedはBSD由来です。 sedのこの系統は、TAB文字IIRCの表記として\tを受け入れたことはありません。あなたのシェルは(OSX上のデフォルトです)bashある場合は、代わりにこれを試してみてください。

sed -i '' -e $'s/\t/|/g' file_to_process.txt 

$'...'は、bashの拡張機能です。それは'...'の引用符ですが、Cスタイルのバックスラッシュエスケープは内部で解釈されます。 bashのマンページから:

$'string'の語は特別に扱われます。単語は 文字列に展開され、円記号エスケープ文字は ANSI C標準で指定されたとおりに置き換えられます。

ので、sedは、最初の2つの空間の間のギャップがリテラルTAB文字であり、それはそれで正しいことを行う必要があります-es/ /|/gが表示されます。

シェルがではなく、 bashの場合、おそらくcontrol-Vを入力してTabキーを押してリテラルタブ文字を入力できます。

+0

ありがとうzwol。これはトリックでした! – MacDudeDonny

-1

道順sedバックスラッシュTを扱う前に、それが発生していないと、間違いなく予想外です!

これは動作します:

sed -i s/\<CTRL-V><TAB>/\|/g text.txt 

< CTRL-V >と<TAB>が押された実際のキーです。

+0

応答Kurtに感謝します。私はすでにそれを試みましたが、ターミナルは実際のタブを貼り付けることはできません。 – MacDudeDonny

+0

@MacDudeDonny * Control * V、⌘Vではありません。 (コントロールキーは、スペースバーの行の一番左にある必要があり、キーボードに応じて、 "control"または "Ctrl"のどちらかと言うべきです)。 – zwol

関連する問題