Удалить пустую строку и Вставить несколько строк с помощью bash & sed - удалить одну пустую строку перед совпадением - PullRequest
0 голосов
/ 24 января 2020

Попытка вставить

хост: localhost

порт: 5432

имя пользователя: postgres

пароль: postgres

в файл database.yml со скриптом bash, я был, наконец, добился определенного успеха. Вот сценарий до сих пор:

#!/bin/sed -f

/^development:/i\ \ host: localhost\n  port: 5432\n  username: postgres\n  password: postgres

Но он все еще оставляет пустую строку перед вводом. Как я могу удалить это в том же файле bash? Последнее, что мне сейчас нужно, это вывод go из

Line
Line 

host: localhost   
port: 5432   
username: postgres

в:

Line
Line     
host: localhost   
port: 5432   
username: postgres

с использованием параметра поиска и совпадения в том же файле bash, приведенном выше.

1 Ответ

0 голосов
/ 26 января 2020

Хорошо, я не мог заставить ваш код работать на себя (я думаю, что его не хватает), поэтому я просто переписал то, что вам нужно, гораздо проще. Дайте нам знать, почему вам нужно использовать sed, если есть:

#!/bin/bash

echo "  host: localhost
  port: 5432
  username: postgres
  password: postgres" > database.yml

Это просто создаст нужный вам файл. Вам не нужно sed для этого. Что касается следующих двух вопросов, если вы хотите удалить первую пустую строку, вы можете использовать следующую команду sed:

sed -i '1d' database.yml

Замените 1 номером строки, которую вы хотите удалить. И для вашего последнего вопроса, если вы знаете, какой номер строки пуст, вы можете использовать указанную выше команду sed, но если нет, вам может помочь следующее:

sed -i '/^$/d' database.yml

Удалит все пустые строки внутри файла database.yml. Вы можете достичь того же самого с awk (Подробнее о awk здесь ):

awk 'NF' database.yml > database1.yml

Вы можете удалить только первый пробел, например awk, как показано ниже :

awk 'NR!=1' database.yml > database1.yml

Обратите внимание, что вы не можете вывести awk в один и тот же файл.

Надеюсь, это поможет.

...