web-dev-qa-db-ja.com

AWKを使用して改行を削除する

私のbashスクリプトに関する問題に直面しています。

以下は私のbashコードです:

#!/bin/bash

cd /root/Msgs/TESTNEW/new

file=myfile.txt

var1=$(awk '(NR==30){print $2}' $file)
var2=$(awk 'NR>=38 && NR<=39' $file)
var3=${var2// /+}

curl "http://<server_ip>/power_sms/send_sms.php?username=<user>&password=<pass>phoneno=$var1&text=$var3"

このスクリプトは、特定のファイル(ex:myfile.txtの場合)のある範囲の行を読み取るためのものです。次に、ファイルの内容をいくつかの変数(var1、var2)に入れます。その後、変数はcurl関数に呼び出されます。

ファイルの内容に改行ごとにスペースがあると問題が発生します。これにより、空白文字を受け入れないため、カールが機能しなくなります。スペースをプラス記号に置き換えることに成功しました。ただし、新しい行がある場合は常に、プラス記号ではなく間隔があります。

出力の一部は以下のとおりです。

hi+there.hopefully+you+can+get+this+email+which+are being+send+as+sms.

誰かが私を助けてくれますか?.

6
user119720

Linuxを使用している場合、これは改行を+に置き換えます

awk '{printf "%s+",$0} END {print ""}'

またはsedで

sed ':a;N;$!ba;s/\n/+/g'

11
Sirch
 awk NF = NF RS = OFS = + 

結果

 hi + there.hopefully + you + can + get + this + email + which + are + being + send + as + sms。
10
Steven Penny

編集:awkのソリューションの場合、これを探しています:

awk 'BEGIN {RS=""}{gsub(/\n/,"",$0); print $0}' myfile.txt

ファイルからすべての改行を取り除く別の方法:

tr -d "\n"

例:

tr -d "\n" < myfile.txt > myfilewithoutnewlines.txt
5
Silviu

あなたはこれを間違った方法で行っています。真に普遍的な解決策を得るには、テキストを RL-encode テキストにする必要があります。

これを行い、次のようなテキストを使用すると、

This is 
a test 
text

あなたはこれで終わります:This+is+%0d%0aa+test+%0d%0atext

これを行うには、curlを使用できます。

curl -G -d username=<user> -d password=<pass> -d phoneno=$var1 \
       --data-urlencode [email protected] \
       http://<server_ip>/power_sms/send_sms.php

詳細については、man curlを参照してください。

3
Sven

@Sirch sedコードで、前述の「+」を他の区切り文字に置き換えることができることを指摘したかっただけです。これが何人かの初心者に役立つことを願っています!

sed ':a;N;$!ba;s/\n/   /g' #puts 3 spaces between the result
0
MickyG