@@@とNotApplicable文字列を置き換えて、出力を別のファイルにリダイレクトしますか? [コピー]

@@@とNotApplicable文字列を置き換えて、出力を別のファイルにリダイレクトしますか? [コピー]

私はサポートがあまりないIBM AIXを使用しています。たとえば、sed -ised with\t私の場合は機能しません。

NotApplicable文字列をaに置き換えてsingle space ' 'から、awkまたはsedを含む単一のコマンドを使用して、指定された順序で複数文字の区切り@@@文字をaに置き換えたいと思います。tab delimiter

以下のようにsedを試しましたが、うまくいきません。次のコマンドは検索を追加し、NotApplicableを単一のスペースに置き換えることはできません。

sed 's/@@@/\t/g' file.csv > file.xls

サンプル。

cola@@@colb@@@colbc
test@@@test@@@test
test@@@NotApplicable@@@test
123@@@145@@@567
333@@@444@@@NotApplicable

cola    colb    colbc
test    test    test
test            test
123     145     567
333     444         

答え1

翻訳するザイルズの答えこの場合は次のようになります。

sed $'s/@@@/\t/g; s/NotApplicable/ /g' file.csv > file.xls

これは、TABとして解釈できるようにANSI-C引用符を使用します\t。引用符内の他のすべては既存のsedコマンドです。

答え2

これを行うより明確な方法があるかもしれませんが、UNIXシステムで文字を生成する1つの方法はtr(1)を使用することです。

tab=`echo t | tr t '\011'`
sed "s/NotApplicable/ /g; s/@@@/$tab/g" file.csv > file.xls

気づくダブルコマンドの周囲に引用符を付けますsed

関連情報