bash 中的文件解析
File parsing in bash
我有一个包含以下内容的文本文件:
Hostname=Hostname2,Hostname3
使用 bash 命令如何才能仅将 Hostname2
和 Hostname3
提取到单独的文件中。我希望 Hostname2
和 Hostname3
位于不同的行中。
有时文本文件会像 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
>
: 最后,这将重定向上一个命令的输出并将其写入指定文件。
我有一个包含以下内容的文本文件:
Hostname=Hostname2,Hostname3
使用 bash 命令如何才能仅将 Hostname2
和 Hostname3
提取到单独的文件中。我希望 Hostname2
和 Hostname3
位于不同的行中。
有时文本文件会像 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
>
: 最后,这将重定向上一个命令的输出并将其写入指定文件。