bash 中的文件解析

File parsing in bash

我有一个包含以下内容的文本文件:

Hostname=Hostname2,Hostname3

使用 bash 命令如何才能仅将 Hostname2Hostname3 提取到单独的文件中。我希望 Hostname2Hostname3 位于不同的行中。 有时文本文件会像 2 个以上的主机, Hostname=Hostname2,Hostname3,Hostname4 然后我必须将所有 3 台主机提取到单独的文件中。如何在 bash 中完成?

您可以使用 awk 打印(唯一)行的第二个 "field",指示它使用 = 作为带有 -F 选项的 "field separator" . awk 的输出是 "Hostname2,Hostname3"。

然后可以使用 tr ("translate") 实用程序将所有逗号更改为换行符。结果打印到标准输出,以便您的 shell 可以通过 >.

将其重定向到文件
awk -F= '{print }' file | tr ',' '\n' > hostnames.txt
egrep -o '[^=,]+' /path/to/file | tail -n +2 > /path/to/new\ file

说明

egrep: 一个文件模式搜索器,允许您使用正则表达式搜索文件内容和匹配行。

-o: egrep 的一个选项,指示它只打印行的匹配部分,而不是整行。

'[^=,]+': 用于匹配文件内容的正则表达式。此处,[^=,]+ 表示任何不是 =, 的字符至少连续出现一次。简单地说,它匹配由 =,.

分隔的单词

egrep命令的结果是:

Hostname
Hostname2
Hostname3
Hostname4

|: 将上一个命令 (egrep) 的结果传送到下一个命令:

tail -n +2: 获取输入并从相对于开头(即第二行)的第 +2 行开始,然后打印剩余的行。

将前面命令的输出作为输入,tail的结果是:

Hostname2
Hostname3
Hostname4

>: 最后,这将重定向上一个命令的输出并将其写入指定文件。