我制作了一个简单的 bash 脚本来打包一个文件然后上传它,如果一切正常,我会得到一些http://
指向我的东西的链接作为输出我想知道如何将这些链接自动复制到文件或变量中?另外,我得到了一些不是以开头的行,http://
但是#
例如如何删除它们并在此位置添加空行?
要将脚本输出捕获到文件,请使用:
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 old
is any 正则表达式。在我们的例子中,old
是^#.*
其中^
的一个行的开头匹配,#
匹配散列符号,.*
是一个通配符匹配任何如下。在我们的例子中,new
是空的。因此, sed 's/^#.*//'
替换#
以空行开头的行。
tee
是用于制作标准输出副本的实用程序。 tee file.txt
将获取它在 stdin 上找到的任何内容,并 (a) 将其保存到文件,file.txt
同时 (b) 将其发送到 stdout。如果要附加到file.txt
,而不是覆盖它,我们可以使用tee -a file.txt
其中的-a
选项告诉tee
追加。
将 的内容first.txt
放在 的开头file.txt
:
{ cat first.txt; script.sh; } >file.txt
Run Code Online (Sandbox Code Playgroud)
根据某种模式选择线条而不修改它们,grep
是正确的工具:
script.sh | grep '^http' >file.txt
Run Code Online (Sandbox Code Playgroud)
sed
允许选择一系列行。在这里,我们使用范围/^http/,$
where/^http/
是遇到的第一行,http
并且$
是输入中最后一行的 sed 符号。 p
告诉sed
打印与该范围匹配的行:
script.sh | sed -n '/^http/,$ p'
Run Code Online (Sandbox Code Playgroud)
{ 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)