私が持っています
入力:
NISHA =\455
出力:
NISHA = 455
出力から\
を削除したい。コマンドsed "s/[\]//g" P
を使用しようとしましたが、機能せず、エラーのフラグが立てられます。
character found after backslash is not meaningful
例の結果に示すように、円記号をスペースで置き換えることができます。
sed 's/\\/ /g'
または、コードに表示されているとおりに削除できます。
sed 's/\\//g'
バックスラッシュをエスケープしてその特別な意味を取り消すと、問題が発生する可能性があります。バックスラッシュは、シェルと正規表現の両方でエスケープするために使用される特殊文字です。
シェルのコマンドラインまたはスクリプトに入力するコマンドは、最初にシェルによって処理されます。シェルは、文字の特殊な意味とエスケープを解釈します。次に、結果がコマンドに渡されて実行され(sed
など)、文字の独自の解釈が実行されます。コマンドを作成するときの精神的な手順は逆です。最初に正規表現にエスケープを追加し、次にシェルにエスケープを追加します。
正規表現では(sed
、grep
などのコマンドへの入力)バックスラッシュは、このようなバックスラッシュでエスケープできます:\\
また、バックスラッシュが特別な意味を失うため、使用したように[\]
のセット式を使用できます。
シェルでは(bash
のように)バックスラッシュでバックスラッシュをエスケープできます。したがって、\
の代わりに\\
と記述します。文字列を二重引用符"
で囲むと、バックスラッシュの動作がより複雑になります <1> ですが、二重のバックスラッシュは単一のバックスラッシュを生成します。文字列を一重引用符'
で囲むと、'
を除くすべての文字が文字どおりに扱われます。
二重引用符を使用する場合は、次のいずれかを使用できます:sed "s/\\\\//g"
-シェルで\
によって\
をエスケープし、正規表現の\
をすべてエスケープします。実際、この場合、すべての特殊文字が適切にエスケープされるため、二重引用符は必要ありません。sed "s/[\\]//g"
-シェルでバックスラッシュ\
でエスケープし、正規表現ではセット[
]
を使用します。sed "s/[\]//g"
-はい、あなたの例はPOSIX準拠の環境で動作するはずです!二重引用符の間\
は、二重引用符のコンテキストで特殊文字の前にない限り、それ自体を表します:$`"\
または改行。あなたの場合、シェルまたはsed
がPOSIX標準に準拠していないようです。
単一引用符を使用すると、使用した文字列またはより短い方法を使用することもできます:sed 's/[\]//g'
sed 's/\\//g'
バックスラッシュをエスケープする必要があります。これを試して:
sed 's/\\//g'
Sedソリューションが必要ない場合は、次のコマンドを試してください。
$ echo "NISHA =\455"| awk -F'\' '{print $1 $2}'
$ echo "NISHA =\455"| tr '\\' ' '
$ echo "NISHA =\455"| tr -d '\\'
$ echo "NISHA =\455"| cut -c 1-7,9-11
Awkでは、私はこのようにします、
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
\
前 \
は、ほとんどの特殊文字で行うように。