0

以下を使用して、いくつかのファイルでタブをコンマに置き換えようとしています:

#!/bin/sh 
for i in *output_*.txt  
do   
sed 's/ /;/g' $i > $i 
done

しかし、出力ファイルにはまだタブ区切り文字があるため、機能していません。forループなしで単一のファイルで使用している場合にのみ機能します。

何か助けはありますか?

ありがとう。

4

2 に答える 2

3

いくつかのことが間違っています。unqouted 変数と同じファイルへの出力リダイレクト。ループも必要ありません。

試す: sed -i 's/ /;/g' *output_*.txt

于 2012-06-25T08:15:03.563 に答える
0

必要な正しいスクリプトは次のとおりです。

find . -name '*output_*.txt' | while read FILENAME; do
    (sed -e "s/\\t/;/g" <${FILENAME} >${FILENAME%.txt}.tmp) && (mv ${FILENAME%.txt}.tmp ${FILENAME});
done

このスクリプトには、いくつかの重要な機能があります。

  1. *output_*.txt現在のディレクトリとすべてのサブディレクトリで呼び出されたすべてのファイルを検索します。サブディレクトリに再帰したくない場合は、次を使用します。

    find . -maxdepth 1 -name '*output_*.txt' | while read FILENAME; do
    

    最初の行として。

  2. エラーが発生した場合、元の入力ファイルは上書きされません。はその出力を一時ファイル ( ) に生成し、成功した場合にのみ元のファイルを置き換えます。sedsed<filename>.tmp

  3. 他のポスターで指摘されているように、タブ文字\tsedスクリプトで表されます。

このスクリプトによって実行される変換の例は次のとおりです (シーケンスはタブ文字<tab>を表します)。

入力:

    <tab><tab><tab><tab><tab>1行目<tab><tab>
    <tab><tab><tab>2行目<tab><tab>
    <tab><tab>3行目<tab><tab>
    <tab><tab><tab>4行目<tab><tab>
    <tab><tab><tab><tab><tab>line<tab><tab> 5
    

出力:

    ;;;;line 1;;
    ;;;line 2;;
    ;;line 3;;
    ;;;line 4;;
    ;;;;;line;; 5
于 2012-06-26T06:21:01.110 に答える