如何将终端中的行保存到文本文件?

如何将终端中的行保存到文本文件?

我编写了一个简单的 bash 脚本,用于打包文件然后上传,如果一切正常,我会得到一些http://指向我的内容的链接作为输出,我想知道如何将这些链接自动复制到文件或变量?此外,我得到了一些不是以 开头的行,http://而是以 开头的行,#例如,我如何删除它们并在此处添加空行?

答案1

要捕获脚本输出到文件,请使用:

script.sh >file.txt

要删除注释(以 开头的行#)但保留其位置的空白,请使用:

script.sh | sed 's/^#.*//' >file.txt

要执行上述所有操作同时在终端上显示信息,请使用:

script.sh | sed 's/^#.*//' | tee file.txt

解释

  • >是 shell 的重定向符号。它告诉 shell 将要发送到 stdout 的内容重定向到指定的文件。

  • sed是一个逐行编辑实用程序。这里我们使用的sed替换命令类似于 ,s/old/new/其中old是任何正则表达式。在我们的例子中,old是,^#.*其中^匹配行首,#匹配井号,.*是通配符,用于匹配后面的任何内容。在我们的例子中,new是空的。因此, 用空白行sed 's/^#.*//'替换以 开头的行。#

  • tee是一个用于复制 stdout 的实用程序。 tee file.txt它将获取在 stdin 上找到的任何内容并 (a) 将其保存到文件file.txt,同时 (b) 将其发送到 stdout。如果要附加到它file.txt而不是覆盖它,我们可以使用选项指示附加的tee -a file.txt位置。-atee

改进

在本文件开头添加另一个 .txt 文件中的文本。txt

将 的内容放置first.txt在 的开头file.txt

{ cat first.txt; script.sh; } >file.txt

仅复制以 http:// 开头的行

为了根据某些模式选择线条而不进行修改,grep正确的工具是:

script.sh | grep '^http' >file.txt

使用 http://* 从第一行复制

sed允许选择一系列行。这里,我们使用范围/^http/,$,其中/^http/是遇到的第一行,以 开头http$是 sed 中表示输入中最后一行的符号。 p指示sed打印与该范围匹配的行:

script.sh | sed -n '/^http/,$ p'

结合从另一个文件添加文本并从第一行复制 http://*

{ cat first.txt; script.sh; } | sed -n '/^http/,$ p' >file.txt

在以以下开头的每一行后添加一个空白行http

这里我们再次使用sed。当我们找到以 开头的行时,我们会在该行末尾http添加一个换行符:\n

script.sh | sed  's/^http.*/&\n/'

相关内容