Назад | Перейти на главную страницу

удалить разрыв строки с помощью 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.

Проблемы начинаются, когда в содержимом файла есть пробелы в каждой новой строке. Из-за этого завиток не работает, поскольку он не принимает пробельные символы. Мне удалось заменить интервал на символы плюса. Но всякий раз, когда появляется новая строка, он будет иметь интервал, а не символ плюса.

Некоторые из результатов приведены ниже:

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

Кто-нибудь может мне помочь? Спасибо.

awk NF=NF RS= OFS=+

Результат

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'

РЕДАКТИРОВАТЬ: для решения с awk, вы ищете это:

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

Другой способ удалить все символы новой строки из вашего файла:

tr -d "\n"

Пример:

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

Вы делаете это неправильно. Тебе надо URL-кодирование ваш текст, чтобы получить действительно универсальное решение:

Когда вы сделаете это и используете такой текст:

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 text@myfile.txt \
       http://<server_ip>/power_sms/send_sms.php

Для получения дополнительной информации см. man curl.

Я просто хотел указать, что в коде @Sirch sed вы можете заменить вышеупомянутый знак «+» любым другим разделителем. Надеюсь, это поможет некоторым новичкам!

пример

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