2011-12-06 11 views
5

stdoutTABをセミコロンに置き換えるには、ZSHシェルからsedを実行します。sedリテラルを置き換えるTAB

私は(他のシェルでは?)通常1缶理解して使用します。

somecommand | sed 's/\t/;/g' 

しかし、これはFreeBSDでZSH-シェルで私のために動作しません。 \tは表作成者と一致しません。どうしてこれなの?私はまた、複数のバックスラッシュ(最大5)を試しました。


これは、作業を行います。

somecommand | sed 's/[TAB]/;/g' 

[TAB]は私のキーボード上TABボタンに続いてCtrl-Vを入力することにより、挿入された実際のTAB -character、です。

答えて

9

zshの使用は関係ありません。 \tは、sedで使用される正規表現のGNU拡張です。 BSD sedでは拡張機能がないので、リテラルタブを使用する必要があります。

+0

本当にありがとうございました。 – poplitea

+9

@popliteaスクリプトがksh93、bashまたはzsh(pdksh、Bourne、ashなどの他のsh変種とは対照的)でのみ実行される場合、 '$ 's/\ t /; /' g'を使うことができます。シェルはバックスラッシュ展開を行い、 'sed'はリテラルタブ文字を見ます。 – Gilles

+0

@Gilles:Fantastic!私は$()の代わりに$ ''を知っていました。ありがとう、これは簡単に私の問題を解決することができます。しかし、これはコメントではなく答えに入れておくべきでしょうが、(?)。 – poplitea

3

あなたのsedスクリプトをprintfで事前に準備することもできます。

scr="`printf 's/\t/;/g'`" 
somecommand | sed "$scr" 

しかし、マイケルは++ ...また、printfスタイルのエスケープをサポートする他のsedの変種があるかもしれませんが、それは確かに「標準」ではありません。

somecommand | sed -E 's/[[:cntrl:]]/;/g' 

-Eは、文字クラス名を含むことができ、「拡張」正規表現をオン:

0

コマンドの出力は、通常のテキスト(タブのみ&印刷可能なテキスト)であることがわかっている場合、あなたが使用することができます。

関連する問題