2

sedコマンドとループを理解しようとしています。テキスト(20行)の一部を取り、ファイル名を付けてcsvに追加する必要があります。これが私のコードです

for i in ~/mspl/*.doc
do 
    catdoc "$i" > auto.txt
    sed -e '1,20!d' auto.txt > auto1.txt
    sed -e '1s/^/"$i" ;/' auto1.txt > auto2.txt
    sed -e '20s/$/~/' auto2.txt > auto3.txt
    cat auto3.txt >> lines.csv
done

問題は、2番目の「i」引数がcsvのファイル名に変換されないことです。

行で

sed -e '1s/^/"$i" ;/' auto1.txt > auto2.txt

ここで私の間違いは何ですか?

4

2 に答える 2

5

問題は、変数が一重引用符内で展開されないことです'。代わりに二重引用符を使用してください":

# this is assuming you did want to add explicit " around your $i
sed -e "1s/^/\"$i\" ;/" auto1.txt > auto2.txt

二重引用符で囲まれた文字列に明示的な二重引用符を含める必要がある場合は、それらをエスケープする必要があります ( \")。二重引用符を使用できない場合 (たとえば、すでに複数レベルの引用符を使用する非常に複雑なコマンドがある場合)、変数の引用符をいつでも終了できます。

sed -e '1s/^/"'$i'" ;/' auto1.txt > auto2.txt
于 2013-01-18T15:32:32.207 に答える
1

このスクリプトを-x設定で実行して、実際に何が起こっているかを確認すると便利な場合があります。(ただ実行してくださいset -x。)

しかし、率直に言うと、あなた$iは一重引用符で囲まれているため、展開されません。

于 2013-01-18T15:32:46.623 に答える