【问题标题】:Delete blank line and Inserting multiple lines with bash & sed - deleting single blank line before match删除空行并使用 bash 和 sed 插入多行 - 在匹配前删除单个空行
【发布时间】:2020-05-10 19:12:56
【问题描述】:

尝试插入

主机:本地主机

端口:5432

用户名:postgres

密码:postgres

用 bash 脚本导入 database.yml 文件,我已经 终于取得了一些成功。到目前为止的脚本如下:

#!/bin/sed -f

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

但它仍然在输入之前留下一个空行。如何在同一个 bash 文件中删除它?我现在需要做的最后一件事是让输出来自

Line
Line 

host: localhost   
port: 5432   
username: postgres

到:

Line
Line     
host: localhost   
port: 5432   
username: postgres

在上述同一个 bash 文件中使用搜索和匹配参数。

【问题讨论】:

  • 您在shebang中指定了#!/bin/sed -f,然后您调用了命令sed本身,而sed中不存在该命令(解释为命令s
  • 您要输出更改,还是实际编辑文件?如果是后者,ed 在语法上会简单得多。
  • 也就是说,根据行号将数据插入到 YAML 文件中是很脆弱的。
  • 您应该寻找有关 insert multiple lines with sed 的问题,您会看到您的问题已经在很多类似这样的线程中得到解答:stackoverflow.com/questions/25270611/…
  • 试试sed '23s/^/host: localhost\n port: 5432\n username: postgres\n password: postgres\n/' database.yml

标签: linux bash sed insert sh


【解决方案1】:

好的,我无法让您的代码为自己工作(我认为它缺少一些)所以我只是以更简单的方式重写了您需要的内容。让我们知道您为什么需要使用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 here 的信息):

awk 'NF' database.yml > database1.yml

您只能删除第一个空白,例如使用awk,如下所示:

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

请注意,您不能将awk 输出到同一个文件。

希望这会有所帮助。

【讨论】:

  • 感谢 aLuVian,这让我更近了一步,我认为您误解的是 database.yml 是一个更大的文件,而不仅仅是您回显或我发布的文本。当我在上面输入脚本以自动选择 database.yml 时(在 sed 脚本中的代码末尾,我得到“/bin/sed: file ./edit2.sh line 5: unterminated `s' command” 我什至没有指定s 命令,当我输入 #!/bin/sed -f /^development:/i\ \ 主机:localhost\n 端口:5432\n 用户名:postgres#\n 密码:postgres database.yml
  • @Soloff 抱歉,我无法完全理解您的问题。请使用更完整版本的 database.yml 更新您的问题(如果文件很大,您不必放置整个文件)和您的脚本文件,加上错误,所以我可以根据您的确切问题更新我的答案和希望,解决它。
猜你喜欢
  • 2013-05-01
  • 2012-09-04
  • 2013-09-23
  • 2012-08-01
  • 2015-05-20
  • 2011-03-21
  • 2020-11-04
  • 2018-06-07
  • 1970-01-01
相关资源
最近更新 更多