web-dev-qa-db-ja.com

テキストファイルからバックスラッシュを削除する

私が持っています

入力:

 NISHA =\455  

出力:

 NISHA = 455

出力から\を削除したい。コマンドsed "s/[\]//g" Pを使用しようとしましたが、機能せず、エラーのフラグが立てられます。

character found after backslash is not meaningful
10
yisha

例の結果に示すように、円記号をスペースで置き換えることができます。

sed 's/\\/ /g'

または、コードに表示されているとおりに削除できます。

sed 's/\\//g'

特殊文字

バックスラッシュをエスケープしてその特別な意味を取り消すと、問題が発生する可能性があります。バックスラッシュは、シェルと正規表現の両方でエスケープするために使用される特殊文字です。

シェルのコマンドラインまたはスクリプトに入力するコマンドは、最初にシェルによって処理されます。シェルは、文字の特殊な意味とエスケープを解釈します。次に、結果がコマンドに渡されて実行され(sedなど)、文字の独自の解釈が実行されます。コマンドを作成するときの精神的な手順は逆です。最初に正規表現にエスケープを追加し、次にシェルにエスケープを追加します。

  1. 正規表現ではsedgrepなどのコマンドへの入力)バックスラッシュは、このようなバックスラッシュでエスケープできます:\\また、バックスラッシュが特別な意味を失うため、使用したように[\]のセット式を使用できます。

  2. シェルではbashのように)バックスラッシュでバックスラッシュをエスケープできます。したがって、\の代わりに\\と記述します。文字列を二重引用符"で囲むと、バックスラッシュの動作がより複雑になります <1> ですが、二重のバックスラッシュは単一のバックスラッシュを生成します。文字列を一重引用符'で囲むと、'を除くすべての文字が文字どおりに扱われます。

二重引用符を使用する場合は、次のいずれかを使用できます:
sed "s/\\\\//g"-シェルで\によって\をエスケープし、正規表現の\をすべてエスケープします。実際、この場合、すべての特殊文字が適切にエスケープされるため、二重引用符は必要ありません。
sed "s/[\\]//g"-シェルでバックスラッシュ\でエスケープし、正規表現ではセット[]を使用します。
sed "s/[\]//g"-はい、あなたの例はPOSIX準拠の環境で動作するはずです!二重引用符の間\は、二重引用符のコンテキストで特殊文字の前にない限り、それ自体を表します:$`"\または改行。あなたの場合、シェルまたはsedがPOSIX標準に準拠していないようです。

単一引用符を使用すると、使用した文字列またはより短い方法を使用することもできます:
sed 's/[\]//g'
sed 's/\\//g'

20
pabouk

バックスラッシュをエスケープする必要があります。これを試して:

sed 's/\\//g'
6
jherran

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
3
αғsнιη

Awkでは、私はこのようにします、

$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
2
Avinash Raj
sed 's/\\//'

\\は、ほとんどの特殊文字で行うように。

1
DisplayName