2013-05-19

How to represent tab(\t) at sed command in bash script of os x

最近「tsp:tab-separated values」で、タブ(tab, \t)を他の文字列にする必要が有った。簡単に思えたが、ほとんどの「os x」に搭載された「bash中のsed」ではそう簡単でない事が判った。今後の為に纏めて置く。

以下に、説明の為に作成したスクリプト;

#!/bin/bash

#set -x

echo "=== $(basename $0): how to present tab in sed"
echo -e "== for $(bash --version | grep version)\n"

org="pqr    stu" # rとsの間にはタブ

echo "■ 次の原稿には、rとsの間にはタブがある;"
echo "  0.---「${org}」"

echo
echo  "■ タブをバレットに変えようとして、"
echo '■ 「sed -e "s/\t/•/"」にパイプしても、'
echo  "■ タブは其の儘で「t」が消えるだけ;"
echo "  1.---「${org}」"  | sed -e "s/\t/•/"


echo
echo  "■ タブを表す変数を生成する"
echo  '■ 方法1: t1="‹タブ押す›'
echo  '■ 方法2: t2=$(echo -e "\t\c")'
echo  '■■ 両者は等しい'

t1="    " #実際に「tab-key」を押した。
t2=$(echo -e "\t\c")

echo
echo '■ 「sed -e "s/${t1}/•/"」にパイプすると、タブは•に替わる'
echo "  2.---「${org}」"  | sed -e "s/${t1}/•/"

echo
echo '■ 「sed -e "s/${t2}/•/"」にパイプしてもOK'
echo "  3.---「${org}」"  | sed -e "s/${t2}/•/"

echo


echo ■ 参考資料に従って、1.の「'\'t」を「'"$'\''\t'\''"'」に書き換えて
echo '■ 「sed -e "s/"$''\t''"/•/"」にパイプしても、タブは•に替わる'
echo "  4.---「${org}」"  | sed -e "s/"$'\t'"/•/"

echo
echo ■ 同じ参考資料に従って、.bash_profileで「export mytab='$'\''\t'\'」と定義したので
echo '■ 「sed -e "s/$mytab/•/"」とパイプしても、タブは•に替わる'
echo "  5.---「${org}」"  | sed -e "s/$mytab/•/"
echo
echo 「上記、5.の方法が覚え易いし、安全だろう」

echo
echo "=== $(basename $0): end"

其の動作結果を示す;

u1@mmX75:~ $ test_tab
=== test_tab: how to present tab in sed
== for GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)

■ 次の原稿には、rとsの間にはタブがある;
  0.---「pqr    stu」

■ タブをバレットに変えようとして、
■ 「sed -e "s/\t/•/"」にパイプしても、
■ タブは其の儘で「t」が消えるだけ;
  1.---「pqr    s•u」

■ タブを表す変数を生成する
■ 方法1: t1="‹タブ押す›
■ 方法2: t2=$(echo -e "\t\c")
■■ 両者は等しい

■ 「sed -e "s/${t1}/•/"」にパイプすると、タブは•に替わる
  2.---「pqr•stu」

■ 「sed -e "s/${t2}/•/"」にパイプしてもOK
  3.---「pqr•stu」

■ 参考資料に従って、1.の「\t」を「"$'\t'"」に書き換えて
■ 「sed -e "s/"$\t"/•/"」にパイプしても、タブは•に替わる
  4.---「pqr•stu」

■ 同じ参考資料に従って、.bash_profileで「export mytab=$'\t'」と定義したので
■ 「sed -e "s/$mytab/•/"」とパイプしても、タブは•に替わる
  5.---「pqr•stu」

「↑の5.の方法が覚え易いし、安全だろう」

=== test_tab: end
u1@mmX75:~ $
 
【結論】 sedのなかで「\t」を使いたくなったら「$mytab」に置き換えるべし。

.bash_profileでの該当部分は;
export LANG=ja_JP.UTF-8
export mytab=$'\t'

【参考資料】
  1. http://mattintosh.hatenablog.com/entry/2013/01/16/143323
  2. bash Pocket Reference, O'REILLY, ISBN: 978-1-449-38788-4, p11, $' '
—————
この記事の履歴
  1. 開始 2013-05-19(日) 21:22:30 
  2. 修正 2013-05-20(月) 10:57:34 .bash_profile

0 件のコメント:

コメントを投稿

注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...