
これは非常に簡単なはずですが、何らかの理由で機能しません。
sed -i.bak -E 's/\t/ /' file.txt
タブを置き換える代わりにt
文字を置き換えます。引用文など、私が考えることができるすべてのバリエーションを試しました。 Googleで見つけました。他の人非常に似た表現を使うことは彼らには効果があるようです。
これは-E
OS Xの問題です。私はその失敗がOS Xの奇妙な性質のためかもしれないと思ったsed
ので、Rubyでも試しましたが(そうではありませんでした-i
)同じ結果を得ました。
ruby -pe '$_.gsub!(/\t/," ")' < file.txt > file.new
私はOS XとiTermでBash 3.2.51を使用していますが、どちらがどれほど重要かを知りません。奇妙な環境変数セットはありませんが、関連性があると思われる項目を公開できます。
何が間違っている可能性がありますか?
修正する:Ruby版を試したときにGillesが指摘したので、他の間違いや誤字があったようです。する働く(そして私はいいえ彼が私を誤解させてください! )。何が起きているのかよくわかりませんが、私の間違いであるに違いないと確信しています。
答え1
sedのタブ文字構文は\t
標準ではありません。その脱出はGNU sed 拡張。多くの人がGNU sed(非埋め込みLinuxのsed実装)を使用しているので、オンラインでそれを使用する多くの例を見つけることができます。しかし、OS X sed他の* BSD sedと同様に、タブ文字はサポートされておらず、代わりにバックスラッシュが次のように\t
処理されます。\t
t
次のようなさまざまなソリューションがあります。
リテラルタブを使用してください。
sed -i.bak 's/ / /' file.txt
タブ文字を使用
tr
または生成します。printf
sed -i.bak "s/$(printf '\t')/ /" file.txt sed -i.bak "s/$(echo a | tr 'a' '\t')/ /" file.txt
バッシュを使ってバックスラッシュエスケープを許可する文字列構文。
sed -i.bak $'s/\t/ /' file.txt
Perl、Python、またはRubyを使用してください。公開したRubyコードスニペットが機能します。
答え2
Bashのみの使用引用するCのように文字列で作業できるため、エスケープシーケンスではない実際のタブ文字がsedに渡されます。
sed -i.bak -E $'s/\t/ /' file.txt
答え3
sed -i $'s/\t/ /g' file.txt
OS Xで動作し、Linuxで使用したのと同じコマンドです。
答え4
sed
OS Xの機能(サポート\t
など)よりも多くの機能が必要な場合は、以下をインストールしてください。GNU sed。