2017-01-18 9 views
2

awkで2つの文字列を連結しようとしています。そのうちの一つが「\ rを」を含んでいるようだ:awkのエスケープ文字を削除するには?

Hillo 

stringA = "Hello\r" 
stringB = "Hi" 
print stringA stringB 

結果

私はstringAのソースを変更できない場合は「\ r」を削除するには何ができますか?

感謝:)

+0

野生の推測 - 文字列Aは、ファイルの内容を読み込むことによって読み込まれています。そうであれば、入力ファイルでdos2unixなどを実行してからawkを実行するか、gawkを使用している場合は 'RS = '\ r?\ n" 'を設定するか、' sub(/ \ r /、 "") 'を入力してください。 –

答えて

0

は考える:

$ awk 'BEGIN {s1="Hello\r"; s2="Hi"; print s1 s2}' 
Hillo 

ちょうどキャリッジリターン\rgsub()と交換してください:ある

$ awk 'BEGIN {s1="Hello\r"; s2="Hi"; gsub(/\r$/,"",s1); print s1 s2}' 
HelloHi 

を、gsub(/\r$/,"",s1)は、文字列の末尾に\rを探しますs1を入力し、""に置き換えます。つまり、remoそれを守る。

複数のキャリッジリターンが表示された場合は、$を取り除くだけで、行の末尾に一致するようになります。

Ed Mortonは、おそらく1つのキャリッジリターンが文字列に表示されることを示唆しています。これはかなり合理的です。その場合はsub(/\r$/,"",s1)の代わりにsub()を使用してください。

+1

ありがとう、たくさん助けました:) –

関連する問題