1

私は以下を持っています。htmlの一部のフィールドを、カラットで区切られたテキストファイルの値に置き換えています。

while  IFS=^ read col1 col2 col3 col4 col5 col6
do
    echo $col1
      echo "HtmlFor$col1" >> "SiteHtml.txt"
      cat $FILENAME1 | sed  "s/var1/$col1/" | sed  "s/var2/$col2/"| sed  "s/var3/$col3/" | sed  "s/var4/$col4/" | sed  "s/var5/$col5/" >> "SiteHtml.txt"
      # | sed  "s/var3/$col3/" | sed  "s/var4/$col4/" | sed  "s/var5/$col5/" | sed  "s/var6/$col6/"
done

列に円記号がある場合、エラーが発生します。「/」でエスケープしようとしても、エラーが発生します。それらを削除した場合にのみ機能しますが、これはできません。私は何が間違っているのですか?

4

2 に答える 2

0

別のバージョンは次のとおりです。

echo "\\" | sed "s [\] replace "
于 2012-12-20T18:48:43.323 に答える
0

'sed'の1つの円記号を置き換えるには、3つの円記号を使用する必要があります。

例:

echo "\\" | sed "s/\\\/replace/"

その理由は次のとおりです。最初の\は引数として渡されている間に2番目の\をエスケープし、バイナリ引数内に渡されると「s / \ / replace」のようになり、プログラムが文字列を解析すると、2番目の\は3番目の\は、最終的に文字列を'\'として置き換えます。

\がエスケープされる可能性があるため、多くの問題が発生する可能性があります。これらのことの1つがあなたを悩ませているかもしれません。

  1. '\'は、c、n、または文字列で使用するときに意味を持つその他の特殊文字の横にあります
  2. '\'は、文字列$ col1変数の最後の文字であり、sedが文字列を解析しているときにその意味が無視されます。

HTMLが解析されているのを見ないと、多くのことを言うことはできません。

注:エラーが発生する可能性があるのはこれらだけではありませんが、バックスラッシュがsedの文字列解析にどのように影響するかについての一般的な考え方があり、解決策を理解できることを願っています。

PS:二重引用符の間に渡されたものは、引数として渡す前にシェルによって値に置き換えられますが、一重引用符の間に渡されたものは、その値に置き換えられないことも知っておいてください。

于 2012-12-20T18:31:18.103 に答える