如何在文本文档中特定标题下创建项目列表?(Linux / Bash)

黏度

尽可能简单地说,在具有bash / sed / awk和基本OS命令的Linux中,我试图在文本文件中创建一个包含多个标题的列表,并在它们下面带有一串字符串(服务器名)。然后,我希望能够运行一个脚本,并在运行时作为选项/参数传递的特定标题下,对每个条目运行各种任务。

该文本文件的示例如下:(这些条目应在有问题的标题下的单个列中排序,但我无法使其以这种方式显示在此页面上。)

[main_server_list]
Jupiter
Saturn
Thisguy
Thatguy
BuffalO
randomspite
coffeebinge

[alternate_server_list]
Jupiter
Saturn

[Tertiary_server_list]
Thisguy
Thatguy
coffeebinge

[Enough_already]
BuffalO
randomspite

因此,基本上,如果我想将文件复制到所有机器的目录中,则需要执行以下操作:

   # bash maincopyscript.sh [main_server_list]

并且“循环”会知道要在其上安装服务器的服务器列表将是[main_server_list]标头下的每个条目,但是忽略任何其他标头下的其他所有内容。

同样,我也希望能够做到:

   # bash maincopyscript.sh [Tertiary_server_list]

并且期望具有相同的功能,只是这次,仅对[Tertiary_server_list]标头下的条目运行“循环”,然后完成操作。

最后,如果希望的话,我希望能够以任意顺序指定多个标头。如:

   # bash maincopyscript.sh [Enough_already] [alternate_server_list]

然后,它应该仅在这两个标题下的条目上运行脚本中指定的操作,然后完成。

希望您能理解这个想法,基本上是一种主要利用bash / sed / awk做到这一点的方法。(如果需要,甚至可以使用其他工具)

是的,我了解到ansible / puppet / chef也可以帮助我获得这些结果,但是无论如何,我都有具体的理由想要这样做。我尝试搜索一个小时或2个关于此内容的现有帖子,但找不到一个帖子,因此最终决定问我一个问题。任何帮助,将不胜感激!

(奖金,如果有人还可以向我展示如何按字母顺序在每个标题下放置条目,同时使标题和组自身保持完全相同的格式,那也将是一件好事!)

伊尔卡楚

您可以使用awk从标题下方提取名称,然后将其放入数组 变量中,然后使用遍历数组for此处的脚本从命令行获取模式。

#!/bin/bash
patt=$1
if [ -z "$patt" ] ; then echo "need an argument" ; exit 1 ; fi
A=( $(awk '/^\[/ {p = 0};
           /^\['"$patt"'\]/ {p=1; next}
           p && !/^ *$/ ;' < servers )  )

for x in "${A[@]}" ; do 
    echo doing something with "$x" 
done

所以,

$ bash for_all.sh alternate_server_list
doing something with Jupiter
doing something with Saturn

awk程序中:
/^\[/ {p = 0}-如果行中的第一个字符是开括号,则将p设置为零;
/^\['"$patt"'\]/ {p=1; next}-如果我们匹配模式,则将p设置为一个,然后跳至下一行。注意,该模式是从shell变量提供给awk的,因此它将被视为正则表达式。引号有点有趣,因为部分代码用单引号引起来,然后变量用双引号引起来,然后更多的代码用单引号引起来。喜欢'foo' "$var" 'bar'但没有空格。
p && !/^ *$/-如果设置了p且行不为空(仅在开始和结束之间留有空格),请打印它(默认操作)。


哦,而且,如果您的列表项包含任何有趣的东西(例如空格),这将崩溃并燃烧。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在包含bash中某些文本的行的正前方插入行到文本文档中?

来自分类Dev

从bash中的文本文档替换/更新列值

来自分类Dev

使用bash shell脚本计算文本文件中每个标题下的行数

来自分类Dev

使用文本文档更改列表中的项目

来自分类Dev

Vim中纯文本文档的项目符号列表

来自分类常见问题

如何在第n个单词之后在文本文档中创建新行?

来自分类Dev

如何在第n个单词之后在文本文档中创建新行?

来自分类Dev

如何在文本文档中添加新行

来自分类Dev

如何使用 BASH 脚本在文本文件上创建动态标题

来自分类Dev

使用bash,我如何在文本文件中每隔这么多字符添加特定文本?

来自分类Dev

使用bash,我如何在文本文件中每隔这么多字符添加特定文本?

来自分类Dev

如何使用SSH命令将递归目录和文件列表导出到Linux Bash Shell中的文本文件?

来自分类Dev

如何使用SSH命令将递归目录和文件列表导出到Linux Bash Shell中的文本文件?

来自分类Dev

如何提取以某些单词开头的特定标题下的文本

来自分类Dev

如何在bash中更改Konsole标题?

来自分类Dev

如何在python / bash中创建IP端口列表?

来自分类Dev

如何在特定标题下隐藏表格列?

来自分类Dev

如何在Shell Bash Linux中替换列表

来自分类Dev

如何在Linux bash中创建采用位置参数的别名?

来自分类Dev

如何在Linux中创建自定义bash命令

来自分类Dev

Linux +如何在bash中创建简单的进度栏

来自分类Dev

Linux,打印文本文档的特定部分

来自分类Dev

Bash中的Bash跟踪模式(bash -x)

来自分类Dev

Bash:如何在Bash中寻找鼠标

来自分类Dev

如何在bash中暂停bash

来自分类Dev

如何删除bash / linux中的特定行?

来自分类Dev

如何在bash中创建秒表?

来自分类Dev

如何在bash脚本中创建循环

来自分类Dev

如何在bash中创建命令?

Related 相关文章

  1. 1

    如何在包含bash中某些文本的行的正前方插入行到文本文档中?

  2. 2

    从bash中的文本文档替换/更新列值

  3. 3

    使用bash shell脚本计算文本文件中每个标题下的行数

  4. 4

    使用文本文档更改列表中的项目

  5. 5

    Vim中纯文本文档的项目符号列表

  6. 6

    如何在第n个单词之后在文本文档中创建新行?

  7. 7

    如何在第n个单词之后在文本文档中创建新行?

  8. 8

    如何在文本文档中添加新行

  9. 9

    如何使用 BASH 脚本在文本文件上创建动态标题

  10. 10

    使用bash,我如何在文本文件中每隔这么多字符添加特定文本?

  11. 11

    使用bash,我如何在文本文件中每隔这么多字符添加特定文本?

  12. 12

    如何使用SSH命令将递归目录和文件列表导出到Linux Bash Shell中的文本文件?

  13. 13

    如何使用SSH命令将递归目录和文件列表导出到Linux Bash Shell中的文本文件?

  14. 14

    如何提取以某些单词开头的特定标题下的文本

  15. 15

    如何在bash中更改Konsole标题?

  16. 16

    如何在python / bash中创建IP端口列表?

  17. 17

    如何在特定标题下隐藏表格列?

  18. 18

    如何在Shell Bash Linux中替换列表

  19. 19

    如何在Linux bash中创建采用位置参数的别名?

  20. 20

    如何在Linux中创建自定义bash命令

  21. 21

    Linux +如何在bash中创建简单的进度栏

  22. 22

    Linux,打印文本文档的特定部分

  23. 23

    Bash中的Bash跟踪模式(bash -x)

  24. 24

    Bash:如何在Bash中寻找鼠标

  25. 25

    如何在bash中暂停bash

  26. 26

    如何删除bash / linux中的特定行?

  27. 27

    如何在bash中创建秒表?

  28. 28

    如何在bash脚本中创建循环

  29. 29

    如何在bash中创建命令?

热门标签

归档