1

bash の文字列からエスケープ文字を削除する必要があります。/ エスケープされた URL パスを含むデータ構造を取得するので、通常のリンクを受け取ります。

http://stackoverflow.com/questions/ask

/: をエスケープしたものとして

http:\/\/stackoverflow.com\/questions\/ask

ここで、2 番目のリンクから \ を削除する必要があります。この目的のために、sedを使用してみました

 `echo '"'${paths[$index]}'"' | sed "s@\\@@g"`

しかし、私はエラーが発生します:

sed: -e expression #1, char 6: unterminated `s' command

\\ を ie に置き換えると。_ チャームのように機能し、文字列内の _ の出現をすべて削除します。sed を使用して文字列内のエスケープ文字を削除するにはどうすればよいですか?

4

4 に答える 4

6

これを試して:

.......|sed 's@\\@@g'

また:

.......|sed "s@\\\\@@g"

EDITテスト出力を追加します。

kent$  echo "http:\/\/stackoverflow.com\/questions\/ask"|sed "s@\\\\@@g"
http://stackoverflow.com/questions/ask

kent$  echo "http:\/\/stackoverflow.com\/questions\/ask"|sed 's@\\@@g'  
http://stackoverflow.com/questions/ask
于 2013-03-06T10:32:24.853 に答える
2

を使用する必要はありませんsed

paths[index]=${paths[index]//\\/}

または単に

echo ${paths[index]//\\/}

値をその場で変更せずに結果を表示します。

于 2013-03-06T13:54:03.963 に答える
2

あなたの質問は、あなたが望む方法について明確ではないので、ここに両方の​​方法があります:

$ sed 's@/@\\/@g' <<< "http://stackoverflow.com/questions/ask"
http:\/\/stackoverflow.com\/questions\/ask

$ sed 's@\\/@/@g' <<< "http:\/\/stackoverflow.com\/questions\/ask"
http://stackoverflow.com/questions/ask
于 2013-03-06T10:35:19.397 に答える
0

これを使用できます:

sed 's@\\@@g'

しかし問題は、文字列に実際に必要なバックスラッシュがエスケープされている場合です。その場合:

sed 's/\\\\/\x1/' |sed 's/[\]//g' | sed 's/\x1/\\/g'

二重バックスラッシュを一時文字 [SOH] に置き換え、他のすべてのバックスラッシュを置き換えてから、必要なバックスラッシュを復元します。

于 2016-08-05T11:46:02.180 に答える