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

Joh*_*ohn 0 command-line bash

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

Joh*_*024 6

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

script.sh >file.txt
Run Code Online (Sandbox Code Playgroud)

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

script.sh | sed 's/^#.*//' >file.txt
Run Code Online (Sandbox Code Playgroud)

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

script.sh | sed 's/^#.*//' | tee file.txt
Run Code Online (Sandbox Code Playgroud)

解释

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

  • sed是一个逐行编辑实用程序。这里我们使用sed替换命令,它看起来像s/old/new/where oldis any 正则表达式。在我们的例子中,old^#.*其中^的一个行的开头匹配,#匹配散列符号,.*是一个通配符匹配任何如下。在我们的例子中,new是空的。因此, sed 's/^#.*//'替换#以空行开头的行。

  • tee是用于制作标准输出副本的实用程序。 tee file.txt将获取它在 stdin 上找到的任何内容,并 (a) 将其保存到文件,file.txt同时 (b) 将其发送到 stdout。如果要附加到file.txt,而不是覆盖它,我们可以使用tee -a file.txt其中的-a选项告诉tee追加。

改进

在此文件的开头添加来自另一个 .txt 文件的文本.txt

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

{ cat first.txt; script.sh; } >file.txt
Run Code Online (Sandbox Code Playgroud)

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

根据某种模式选择线条而不修改它们,grep是正确的工具:

script.sh | grep '^http' >file.txt
Run Code Online (Sandbox Code Playgroud)

从第一行复制 http://*

sed允许选择一系列行。在这里,我们使用范围/^http/,$where/^http/是遇到的第一行,http并且$是输入中最后一行的 sed 符号。 p告诉sed打印与该范围匹配的行:

script.sh | sed -n '/^http/,$ p'
Run Code Online (Sandbox Code Playgroud)

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

{ cat first.txt; script.sh; } | sed -n '/^http/,$ p' >file.txt
Run Code Online (Sandbox Code Playgroud)

在每行开始后添加一个空行 http

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

script.sh | sed  's/^http.*/&\n/'
Run Code Online (Sandbox Code Playgroud)