linux - 如何在配置文件中查找设置的最后一个实例

标签 linux perl search sed awk

我想弄清楚如何在服务器的多个配置文件中找到字符串的last 条目。每个字符串都将在/home/***usernamewouldbehere/public_html/typo3conf/localconf.php 文件中

简而言之 - 配置文件中的最后一个条目将指向应用程序正在使用的数据库服务器 - 我们需要知道哪些帐户指向哪个数据库服务器。

虽然我可以运行这样的东西 -

grep "$_db_host" /home/*/public_html/conf/localconf.php

它并没有多大帮助,因为它为我们提供了很多信息……而不是我们真正需要的信息。

我真正需要知道的是这个字符串的最后一个条目 $_db_host = 'xx';并将它们整理到导出文件中

由于配置文件可能有多个条目(下面的示例)

$_db_host = 'localhost';
$_db_host = '10.0.1.234';

最好在文件中列出所有具有“localhost”条目的文件 然后列出所有具有“10.0.1.234”条目(或可能存在的任何服务器)的条目,但即使我需要手动执行此操作也很好。

我不确定如何使用 Awk 实现它 - ... 并且真的卡住了

我希望的是如下所示的管道

db_host = localhost /home/username1/www/conf/localconf.php
db_host = localhost / home/username2/public_html/conf/localconf.php

db_host= '10.1.2.23' /home/username55/public_html/conf/localconf.php 

希望对你有所帮助:-)

最佳答案

有点不清楚你在问什么。无需进入 perl 或 awk 也许你可以使用类似的东西

grep -H '$_db_host =' /home/*/public_html/typo3conf/localconf.php | tail -n 1

或者,如果您想要每个文件中的最后一个(bash 语法):

for i in (/home/*/public_html/typo3conf/localconf.php); do
   grep -H '$_db_host =' $i /dev/null | tail -1
done

如果您想按 $_db_host 的特定值进行分类,您可以使用排序(有或没有尾部技巧):

grep -H '$_db_host =' /home/*/public_html/typo3conf/localconf.php | sort -t = -k 2,2

(排序说使用“=”作为字段分隔符,然后按第二个字段排序——这将有效地按 $_db_host 的值排序,-H grep 输出将告诉 grep 显示文件名开头的匹配行。

请注意,您也可以通过管道传递上面循环的输出:

for i in (/home/*/public_html/typo3conf/localconf.php); do
   grep -H '$_db_host =' $i /dev/null | tail -1
done | sort -t = -k 2,2

您可以根据需要混合或匹配您的工具!

另一个非常有用的工具是“cut”(使用 -d 指定字段分隔符),您可以使用它来分离输出。

(您也可以在 perl 和 awk 中完成所有这些,但有时,尤其是对于“一次性”,shell 管道更容易)

关于linux - 如何在配置文件中查找设置的最后一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542746/

相关文章:

c - 调用 c 文件时如何添加参数

linux - 如何配置 vim 显示自动完成弹出窗口而无需手动输入命令?

php - MySQL查看列名大小写

xml - 使用 XML::LibXML 替换 XML 节点

linux - 当 perl cgi 脚本中的 setuid 位打开时,param 不起作用

java - 正则表达式匹配或数组搜索

ruby - 如何通过 ssh 在远程机器上使用 ffmpeg

Mysql 使用 Perl DBI 跨两个表删除重复行

ios - Swift3 iOS - 如何在 URL 数组 [URL?] 中搜索 URL

c - 如何快速对许多正则表达式键进行字符串匹配?