我们有一个应用程序从文件中获取设置参数。 我想从启动string中提取一个或两个语句,并将它们呈现为一个不错的表格。
一个示例string将是-Dmysql.host = mysql1.company.com,但它也可能是一个ip地址或一个机器名称,而不是一个fqdn。
我想find-Dmysql.host =但返回服务器名称。
有关如何在文件中findstring“-Dmysql.host =”的任何提示或指示符,都会显示给下一个空格的所有内容。
也许有更好的方法。 我打算在十几台机器上运行它,最终返回一个列表,哪个应用程序机器被configuration为与哪个数据库机器对话。
谢谢你的时间。
尝试这个:
grep mysql.host file.txt | sed -e 's/.*mysql.host=\(\S*\).*/\1/g'
你应该得到一个值是mysql.host的值。 如果你愿意的话,你也可以把-D放在匹配中,但是我把它留给了,因为它是grep的一个参数,你需要把它转义出来。
从给出的信息中,我将首先根据空白分割所有东西,然后根据=符号分割这些令牌。 纯粹的bash解决scheme将如下所示。
foo="bar=baz boo=zip" for keyvalue in $foo; do key=${keyvalue%%=*} value=${keyvalue##*=} echo $key $value done
由于IFS可能是空格,因此shell会根据空格来分割。 然后,您可以使用参数(可变)扩展来处理基于等号的键/值对中的分组。
如何喂养文件,以良好的旧sed:
$ echo foo -Dmysql.host=mysql1.company.com -bar | grep -- "-Dmysql.host=" | sed -e 's/^.*-Dmysql.host=//' -e 's/ .*//' mysql1.company.com
所以在你的情况下,你会像这样给它的文件:
$ grep -- "-Dmysql.host=" FILENAME | sed -e 's/^.*-Dmysql.host=//' -e 's/ .*//'
我意识到有一个grep在那里sed可以处理,但这只是更容易写,sed可以是尴尬的。