使用 AWK 删除换行符

use*_*720 13 linux bash 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"
Run Code Online (Sandbox Code Playgroud)

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

当文件的内容在每个新行中都有间距时,问题就开始了。这使得 curl 无法正常工作,因为它不接受空格字符。我设法将间距替换为加号符号。但是每当有新行时,它将有间距而不是加号。

部分输出如下:

hi+there.hopefully+you+can+get+this+email+which+are being+send+as+sms.
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?谢谢。

Sir*_*rch 18

如果您使用的是 linux,那么这会将换行符替换为 +

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

或与 sed

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

  • 注意:在 OS X 上,这不会像 sed 那样适用于较旧的规范。如果您需要完整的 GNU sed 功能,请使用 `gsed`。所以,`brew install gsed` 通过 Homebrew 安装它。 (2认同)

Ste*_*nny 16

awk NF=NF RS= OFS=+

结果

嗨+那里。希望+你+可以+得到+这个+电子邮件+哪个+是+正在+发送+作为+短信。

  • 为什么这不在顶部? (2认同)

Sil*_*viu 9

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

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

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

tr -d "\n"
Run Code Online (Sandbox Code Playgroud)

一个例子:

tr -d "\n" < myfile.txt > myfilewithoutnewlines.txt
Run Code Online (Sandbox Code Playgroud)