无需交互式编辑器即可编辑配置文件值的命令行

小木屋

许多配置文件都是基于格式的,Key value或者Key=value每个文件都有一行。许多包提供了一个默认配置文件,其中这些可用的配置键已经用它们的默认值写入和/或被注释。

我想知道是否有一种工具可以更改那种文件,而无需打开交互式编辑器并且比sed(可能在其上构建的)更高级别

这将是一件简单的事情:

$ conftool file key value

它会在文件中找到键,删除注释符号(如果有),更改值并保存结果。

莱斯马纳

据我所知,没有通用的配置换行工具。我想创建这样一个工具会很困难,因为有很多不同的配置文件语法。

如果您想更改特定配置文件中的特定值,那么您可以为该特定任务编写专门的工具。

这里有两个示例使用 sed 和 awk 来帮助您入门

一个简单的 sed 命令,用于替换一个简单key value语法的键值

$ sed 's/^key2 value2$/key2 newvalue2/' config 

例子

$ cat config 
key1 value1
key2 value2
key3 value3

$ sed 's/^key2 value2$/key2 newvalue2/' config 
key1 value1
key2 newvalue2
key3 value3

但要注意:如果有更多key2 value2行(可能在配置文件的其他部分),那么所有行都将被替换。这在 sed 中很难防止(可能但很难),而在 awk 中更容易。有关尊重部分的 awk 命令,请参见下文。

解释:

此 sed 命令大致执行以下操作:

for every line:
  if line is "key2 value2":
    print "key2 newvalue2"

这个 sed 命令s/pattern/replace/意味着:在每一行中搜索pattern,如果找到则替换为replace. pattern可以是普通字符串或正则表达式(正则表达式)。

正则表达式中^&被称为锚点,分别表示行首和行尾。如果没有锚点,这个模式key2 value2也会匹配这条线xkey2 value2x,结果是xkey2 newvalue2x.

这里有一些例子,我们可以如何改变模式的行为。

也适用于key=value语法

$ sed 's/^key2=value2$/key2=newvalue2/' config 

无论旧值如何,只匹配键

$ sed 's/^key2=.*/key2=newvalue2/' config 

删除可能的评论符号

$ sed 's/^#\?key2 value2$/key2 newvalue2/' config 

如果您重定向输出,您还可以打印到 stderr 以查看某些内容已更改

$ sed 's/^#\?key2 value2$/key2 newvalue2/ w /dev/stderr' config > newconfig

你可以用正确的正则表达式做更多的事情。但这将是另一个问题的另一个答案。

这是一个 awk 脚本,它也可以处理配置部分

/^\[section2\]$/ {
  print
  insection2=1
  next
}
insection2 && /^#?key2=value2$/ {
  print "key2=newvalue2"
  next
}
/^\[.*\]$/ {
  insection2=0
}
1

像这样使用

$ awk -f configer.awk config

例子

$ cat config 
[section1]
key1=value1
key2=value2

[section2]
key1=value1
key2=value2

[section3]
key1=value1
key2=value2

$ awk -f configer.awk config 
[section1]
key1=value1
key2=value2

[section2]
key1=value1
key2=newvalue2

[section3]
key1=value1
key2=value2

您还可以向 stderr 添加详细输出,以便在重定向输出时可以看到发生了什么变化

insection2 && /^#?key2=value2$/ {
  print "key2=newvalue2"
  print "changed line "NR > "/dev/stderr"
  next
}

awk 脚本的简短说明

第一条规则查找[config2]节标题。它会将insection2标志设置为 true

第二条规则查找该key2=value2行。insection2前提是标志为真。然后它将打印具有新值的行。

第三条规则查找任何其他节标题。它会将insection2标志重置为 false。

最后一条规则(唯一的1)是“默认规则”。它只会打印不变的行。

在伪代码中

for every line:
  if line is [section2]:
    note that we are in section2
  else if we are in section2 and line is key2=value2:
    print modified line
  else if line is any other section header:
    note that we are no longer in section2
  else
    print line unchanged

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从命令行连接到WPA2,而无需编辑配置文件

来自分类Dev

如何使用命令行编辑配置文件?

来自分类Dev

Git交互式变基,无需打开编辑器

来自分类Dev

网站的交互式代码编辑器

来自分类Dev

无节正则表达式,无需复杂的正则表达式即可编辑配置文件

来自分类Dev

从 18.04 的命令行编辑 Gnome-Terminal 配置文件

来自分类Dev

从命令行打开 K 菜单编辑器

来自分类Dev

如何设置编辑器命令在zsh中将* only *用于编辑命令行?

来自分类Dev

Visual Studios的编辑器配置文件

来自分类Dev

无需配置即可运行交互式鱼

来自分类Dev

如何在ZSH中的全屏编辑器中编辑命令行?

来自分类Dev

如何在ZSH中的全屏编辑器中编辑命令行?

来自分类Dev

是否有交互式可视化 html 编辑器?

来自分类Dev

如何在Saxon的配置或命令行中为氧气编辑器设置FEATURE_SECURE_PROCESSING?

来自分类Dev

如何在txt文件中从命令行或交互式命令行中搜索名称

来自分类Dev

如何在Java的交互式命令行过程中输入值?

来自分类Dev

MySQL工作台中的交互式命令行

来自分类Dev

在命令行中运行Rscript交互式(readline())

来自分类Dev

从命令行非交互式添加sudoer

来自分类Dev

calc命令行工具始终变为交互式

来自分类Dev

zsh命令行编辑器:输入命令时返回上一行

来自分类Dev

zsh命令行编辑器:输入命令时返回上一行

来自分类常见问题

如何从终端/命令行调用VS代码编辑器

来自分类Dev

如何在Qt应用程序中嵌入Linux命令行编辑器?

来自分类Dev

命令行程序推迟到默认文本编辑器

来自分类Dev

如何从命令行或文本编辑器更改Atom设置?

来自分类Dev

命令行ID3标记编辑器,可处理所有标记

来自分类Dev

从命令行设置“本地组策略编辑器”设置

来自分类Dev

在命令行中将ex用作文本编辑器时,如何使用“ itextESC”?

Related 相关文章

  1. 1

    从命令行连接到WPA2,而无需编辑配置文件

  2. 2

    如何使用命令行编辑配置文件?

  3. 3

    Git交互式变基,无需打开编辑器

  4. 4

    网站的交互式代码编辑器

  5. 5

    无节正则表达式,无需复杂的正则表达式即可编辑配置文件

  6. 6

    从 18.04 的命令行编辑 Gnome-Terminal 配置文件

  7. 7

    从命令行打开 K 菜单编辑器

  8. 8

    如何设置编辑器命令在zsh中将* only *用于编辑命令行?

  9. 9

    Visual Studios的编辑器配置文件

  10. 10

    无需配置即可运行交互式鱼

  11. 11

    如何在ZSH中的全屏编辑器中编辑命令行?

  12. 12

    如何在ZSH中的全屏编辑器中编辑命令行?

  13. 13

    是否有交互式可视化 html 编辑器?

  14. 14

    如何在Saxon的配置或命令行中为氧气编辑器设置FEATURE_SECURE_PROCESSING?

  15. 15

    如何在txt文件中从命令行或交互式命令行中搜索名称

  16. 16

    如何在Java的交互式命令行过程中输入值?

  17. 17

    MySQL工作台中的交互式命令行

  18. 18

    在命令行中运行Rscript交互式(readline())

  19. 19

    从命令行非交互式添加sudoer

  20. 20

    calc命令行工具始终变为交互式

  21. 21

    zsh命令行编辑器:输入命令时返回上一行

  22. 22

    zsh命令行编辑器:输入命令时返回上一行

  23. 23

    如何从终端/命令行调用VS代码编辑器

  24. 24

    如何在Qt应用程序中嵌入Linux命令行编辑器?

  25. 25

    命令行程序推迟到默认文本编辑器

  26. 26

    如何从命令行或文本编辑器更改Atom设置?

  27. 27

    命令行ID3标记编辑器,可处理所有标记

  28. 28

    从命令行设置“本地组策略编辑器”设置

  29. 29

    在命令行中将ex用作文本编辑器时,如何使用“ itextESC”?

热门标签

归档