Неизвестная опция `s 'ошибка sed при добавлении одного текстового файла к другому - PullRequest
0 голосов
/ 13 апреля 2020

В конце 8-й строки я хочу добавить содержимое другого текстового файла, используя sed.

При выполнении команды

sed -i "8s/$/$(sed 's:/:\\/:g' recentchanges.txt)/" message2.json  

я получаю ошибку

sed: -e expression #1, char 56: unknown option to `s'

Принимая во внимание, что sed 's:/:\\/:g' recentchanges.txt работает, и я получаю содержимое текстового файла, как и ожидалось.

Что не так в моей команде sed? Дайте мне знать, если есть какие-либо альтернативные способы обновления того же файла, например awk et c.

Содержимое сообщения 2. json

{
   "Subject": {
       "Data": "Test email sent using the AWS CLI",
       "Charset": "UTF-8"
   },
   "Body": {
       "Text": {
           "Data": "This is the message body in text format.",
           "Charset": "UTF-8"
       },
       "Html": {
           "Data": "This message body contains HTML formatting. It can, for example, contain links like this one: <a class=\"ulink\" href=\"http://docs.aws.amazon.com/ses/latest/DeveloperGuide\" target=\"_blank\">Amazon SES Developer Guide</a>.",
           "Charset": "UTF-8"
       }
   }
}

======= ===============================

Содержимое последних изменений.txt

Mon, 13 Apr 2020 11:49:26 +0530   User1 // Job1
Mon, 13 Apr 2020 11:18:26 +0530   User2 // Job2
Mon, 13 Apr 2020 13:03:59 +0530   User3 // Job3

================================================

Ожидаемый результат

{
   "Subject": {
       "Data": "Test email sent using the AWS CLI",
       "Charset": "UTF-8"
   },
   "Body": {
       "Text": {
        "Data": 
        " Mon, 13 Apr 2020 11:49:26 +0530   User1 = Job1 \n  Mon, 13 Apr 2020 11:18:26 +0530 User2 = Job2 \n Mon, 13 Apr 2020 13:03:59 +053   User3 = Job3 ",
        "Charset": "UTF-8"
       },
       "Html": {
           "Data": "This message body contains HTML formatting. It can, for example, contain links like this one: <a class=\"ulink\" href=\"http://docs.aws.amazon.com/ses/latest/DeveloperGuide\" target=\"_blank\">Amazon SES Developer Guide</a>.",
           "Charset": "UTF-8"
       }
   }
}

Ответы [ 2 ]

3 голосов
/ 13 апреля 2020

Вы можете изменить // на = в jq:

jq --arg changes "$(< recentchanges.txt)" '.Body.Text.Data = ($changes | gsub("//"; "="))' message2.json

(или --rawfile changes recentchanges.txt вместо --arg ... с достаточно новым jq .)

2 голосов
/ 13 апреля 2020

sed - неправильный инструмент для этой работы; используйте jq вместо:

jq --rawfile changes <(sed -e 's:/:\\/:g' <recentchanges.txt) \
  '.Body.Text.Data = $changes' \
  <in.json >out.json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...