使用 AWK 删除换行符

使用 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"

此脚本的目的是读取特定文件(例如:myfile.txt)中的行范围。然后它将文件的内容放入某个变量(var1、var2)中。之后,该变量将被调用到 curl 函数中。

当文件内容在每一行新行中都有空格时,问题就开始了。这导致 curl 无法运行,因为它不接受空格字符。我设法将空格替换为加号。但只要有新行,它就会有空格而不是加号。

部分输出如下:

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

有人能帮助我吗?谢谢。

答案1

如果你使用的是 Linux,那么这将用 + 替换换行符

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

或者使用 sed

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

答案2

awk NF=NF RS= OFS=+

结果

你好,希望你能收到这封以短信形式发送的电子邮件。

答案3

编辑:对于解决方案awk,您正在寻找这个:

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

从文件中删除所有换行符的另一种方法:

tr -d "\n"

一个例子:

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

答案4

我只是想指出,在@Sirch sed 代码中,你可以用任何其他分隔符替换上述“+”。我希望这对一些初学者有所帮助!

例子

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

相关内容