我正在面对一些关于我的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"
这个脚本的目的是读取特定文件(例如:myfile.txt)的一行内容,然后将文件的内容放入一个variables(var1,var2)中。 之后,variables将被调用到curl函数中。
当文件的内容在每行都有空格时,问题就开始了。这使得curl不能正常工作,因为它不接受空白字符。我设法把空格replace成加号。但是每当有新的行时,将有间距,而不是有加号。
一些输出如下:
hi+there.hopefully+you+can+get+this+email+which+are being+send+as+sms.
有人可以帮我吗?谢谢。
如果你正在使用Linux,那么这将取代换行符+
awk '{printf "%s+",$0} END {print ""}'
或与sed
sed ':a;N;$!ba;s/\n/+/g'
你这样做是错误的。 您需要对文本进行url编码才能获得真正的通用解决scheme:
当你这样做,并使用这样的文字:
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 。
awk NF = NF RS = OFS = +
结果
喜+ there.hopefully +你+可以+得+这+是+是+发送+ AS +短信+这个电子邮件+。
编辑:用awk的解决scheme,你正在寻找这样的:
awk 'BEGIN {RS=""}{gsub(/\n/,"",$0); print $0}' myfile.txt
另一种从你的文件中去除所有换行符的方法:
tr -d "\n"
一个例子:
tr -d "\n" myfile.txt > myfilewithoutnewlines.txt