Terminal.app で タブを入力するには?

Terminal.app で,bash に対してキーボードからタブ文字が入力できません.どうすればよいのでしょうか? stty tabs とか,terminal type を ansi, vt102, xterm などに切り替えたりしてみましたが,キーボードのタブキーも,control + I も受け付けられません.
sed で 置換文字列の中にタブを入れたいのですが...

投稿日 2005/02/04 17:27

返信: 13

2005/02/04 20:32 Community User への返信

>Terminal.app で,bash に対してキーボードからタブ文字が入力できません.どうすればよいのでしょうか?
分かりません
>sed で 置換文字列の中にタブを入れたいのですが...
安直に Perl で
置換文字例 が <> の場合
perl -pe 's/<>/¥x09/g' < a.txt > b.txt

2005/02/05 18:18 Community User への返信

機能しないのです.\t は文字 t を陽に示します.それで,\\\t というのも試してみましたが,バックスラッシュという文字とtという文字の2文字と解釈されるようで,だめでした.
(上で,バックスラッシュが全角文字になってしまいましたが,本来は半角です.)
ついでに,^I という文字列も試してみましたがだめでした.

2005/02/05 20:40 Community User への返信

¥¥t はどうですか?
echo ¥t >test
として、hexdump test とすると、
hexdump test
0000000 740a
0000002
ですが、
echo ¥¥t >test とすると、
hexdump test
0000000 5c74 0a00
となり、逆スラッシュ(0x5c)が入ってます。
echo "¥t">test
でも同じになります。

2005/02/05 22:49 Community User への返信

エスケープシーケンスは bash でも sed でも使えないようです.
具体的には,テキストファイルの中のタブを削除する,あるいはスペースに置き換えるというようなことをやりたかったのです.単純化すると,
sed 's/(ここにタブ)//g' input.txt >output.txt
あるいは
sed 's/(ここにタブ)/ /g' input.txt >output.txt
という具合です.このようなものを Emacs で sh のシェルスクリプトとして書いて保存し,それを使って一応目的は果たしたのですが,コマンドラインでタイプできないというのは解せません.そんなはずはないと思うのですが,Terminal.appの仕様なのでしょうか? sh, csh でもダメです.

2005/02/05 22:59 Community User への返信

sed で escape文字が解釈されなかったので Perl で書きました
ただ Perl は高機能なため処理が遅くなります
16進で書くと速度が上がりますので sed に近ずくかと思います
perl -pe 's/<>/¥t/g' < a.txt > b.txt
>perl -pe 's/<>/¥x09/g' < a.txt > b.txt
perl -pe 's/¥x3c¥x3e/¥x09/g' < a.txt > b.txt

2005/02/06 21:09 Community User への返信

しばらくファイル名の補完機能は使っていなかったので忘れていました.
The macosxhints Forum というところに同じ質問があり (http://forums.macosxhints.com/archive/index.php/t-26928.html),タブはコマンドラインでは打てないので,ちょっと違いますがコントロールキャラクタを一括して指定するというのが一つの手として出ていました.つまり,
sed 's/[[:cntrl:]]//g' input.txt >output.txt
という具合です.いっぽう fink の sed 3.02 ではエスケープが使えて,s/\t//g というコマンドでOKらしいです.

2005/02/07 19:12 Community User への返信

sedに問題はありません.(sed 's/(タブ)//g' $1 というシェルスクリプトで問題なくできるので.) 問題は,コマンドインタプリタ (シェル) でタブがタブとしてタイプできないということでした.
Mac OS X 10.3 の sed には -E というオプションはないようです.(man sed にはそのようなオプションは出てきません.)

2005/02/09 19:37 Community User への返信

試していませんが,状況は同じだと思います.(繰り返しになりますが) 問題はシェルでタブがファイル名補完という機能に割り当てられているためなので.

2005/02/10 05:24 Community User への返信

> 問題はシェルでタブがファイル名補完という機能に割り当てられている
これはできない理由にはならないと思います。シェルがタブを別の目的の解釈してしまうのなら、シェルにそういうことをさせずに、そのまま sed に渡すようにすればいいので。自分はこの方面には詳しくないので、こうすればいい、と解決策を提供することはできませんが、その方法はあるはずです。
自分はこういう簡単な場合なら sed を使わずに tr で済ませています。
tr "¥t" " " < input_file > output_file
で OK です。(ちなみに ¥t を "" で囲んでいるのはシェルに ¥t を解釈させないためです。tr の場合はこれで済みます)

2005/02/10 14:00 Community User への返信

仕様と言いたかったのは、¥t などの拡張正規表現が使えないことです。
-E オプションはありませんでしたか。確かに man sed には出てこないですね。perl でなくとも tr という手もありましたね。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Terminal.app で タブを入力するには?

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。