2016-07-26 9 views
4

データベースからいくつかのデータを取得していますが、戻ってくる文字列の1つが1行にあり、文字列\nの複数のインスタンスが含まれています。これらは改行文字ではありません。それらは文字通り文字列\n、すなわちバックスラッシュ+ enまたは16進数5C 6Eです。bashの変数からリテラル文字列 " n"(改行ではない)を削除するには?

私はsedとtrを使って削除しようとしましたが、文字列を認識できないようで、変数にはまったく影響しません。これは私が戻ってくるすべての結果が私が必要としていない文字列から改行文字を削除する方法であるので、Googleで検索するのは難しい問題でした。

これらの文字列をbashの変数から削除するにはどうすればよいですか?

例データ:

echo "$someString" | tr '\\n' '' 

オペレーティングシステム:

\n\nCreate a URL where the client can point their web browser to. This URL should test the following IP addresses and ports for connectivity.

例では、コマンド失敗のSolaris 10

Possible Duplicateを - これはPythonで

+0

あなたは私たちに、入力データの例を与え、そしてあなたがしようとしたものを私たちを見ることができますか? –

+0

'echo" one \\ ntwo "| perl -wpe 's/\\ n // g''です。(入力の '\\ n 'はそのような文字列を作成することです。) – zdim

答えて

4

sedを使用している場合、交換で\を正しくエスケープしなかったと思われます。 trはこの作業にはあまり適していないことにも注意してください。あなたは変数\nを置き換える場合 は最後に、その後、パターン置換パラメータ展開の形)は、あなたの最良の選択肢です。

変数で\nを交換するには、bashのパターンの置換を使用することができます:標準入力に\nを交換するに

$ text='hello\n\nthere\nagain' 
$ echo ${text//\\n/} 
hellothereagain 

を、あなたはsedを使用することができます。\がでエスケープ

$ echo 'hello\n\nthere\nagain' | sed -e 's/\\n//g' 
hellothereagain 

お知らせどちらの例でも\\というパターンです。

3

である場合を除きユーティリティは、単一の文字でのみ動作し、ある文字セットから別の文字セットに変換します。これはあなたが望むツールではありません。 sed

は:

newvar="$(sed 's/\\n//g' <<<"$var")" 

ここで注目に値する唯一のものは\n\のエスケープです。私はhere-string(<<<"...")を使って、変数varの値をsedの標準入力に送ります。

1

あなたはbashはそれ自身に自明かつ効率的にそれを行うことができ、このために外部ツールを必要としません:

$ someString='\n\nCreate a URL where the client can point their web browser to. This URL should test the following IP addresses and ports for connectivity.' 

$ echo "${someString//\\n/}" 
Create a URL where the client can point their web browser to. This URL should test the following IP addresses and ports for connectivity. 
関連する問題