使用Shell命令从KEY,VALUE格式的文件中提取值的方法是什么?

我将介绍如何在Linux命令行(Bash)中从KEY,VALUE格式的文件中获取值的方法。

去掉注释和空行的命令

用中文用一种方式转述以下命令:
cat <文件名> | grep -v ‘^\s*$’ | grep -v ‘^\s*#’
或者
grep -v -e ‘^\s*$’ -e ‘^\s*#’ <文件名>

    • grepの-vオプションは一致するものを除外

 

    • 正規表現の^は行の先頭

 

    • 正規表現の$は行の末尾

 

    • 正規表現のsは空白文字(半角スペース、\t、\n、\r、\f)

 

    正規表現の*は直前のパターンの0回以上の繰り替えし

执行范例如下。

# comments
key01=value01
key02=value02
   #key02=value02
key03=value03
key04=value04

key05=value05
[root@centos85 ~]# cat test.conf | grep -v '^\s*$' | grep -v '^\s*#'
key01=value01
key02=value02
key03=value03
key04=value04
key05=value05
[root@centos85 ~]#
[root@centos85 ~]# grep -v -e '^\s*$' -e '^\s*#' test.conf
key01=value01
key02=value02
key03=value03
key04=value04
key05=value05
[root@centos85 ~]#

用KEY值进行搜索。

猫 <文件名> | 过滤器 -v ‘^\s*$’ | 过滤器 -v ‘^\s*#’ | 过滤器 <搜索关键字>
或者
过滤器 -v -e ‘^\s*$’ -e ‘^\s*#’ <文件名> | 过滤器 <搜索关键字>

[root@centos85 ~]# cat test.conf | grep -v '^\s*$' | grep -v '^\s*#' | grep key02
key02=value02
[root@centos85 ~]#
[root@centos85 ~]# grep -v -e '^\s*$' -e '^\s*#' test.conf | grep key02
key02=value02
[root@centos85 ~]#

将其分割成多个部分,并获取第二部分和VALUE值。

猫 <文件名> | 过滤无空格行 | 过滤无井号行 | 过滤 <搜索键> | 按 “=” 分割并提取第二部分
或者
过滤无空格行和无井号行的 <文件名> | 过滤 <搜索键> | 按 “=” 分割并提取第二部分

    • cutコマンドの-dオプションで=で分割

 

    cutコマンドの-fオプションで2項目目を取得
[root@centos85 ~]# cat test.conf | grep -v '^\s*$' | grep -v '^\s*#' | grep key02 | cut -d "=" -f 2
value02
[root@centos85 ~]#
[root@centos85 ~]# grep -v -e '^\s*$' -e '^\s*#' test.conf | grep key02 | cut -d "=" -f 2
value02
[root@centos85 ~]#

可以通过提供KEY值来获取对应的VALUE值。

4. 其他

可以使用sed命令进行替换,并从KEY值中获取VALUE值。

以中文的方式解释以下指令,只需要一种选项:
cat test.conf | grep -v ‘^\s*$’ | grep -v ‘^\s*#’ | grep “key02” | sed -r s:’key02=’::

使用cat命令读取test.conf文件,再使用grep命令过滤掉空白行,接着过滤掉以#开头的注释行,再过滤只包含”key02″的行,最后使用sed命令将”key02=”替换为空。

[root@centos85 ~]# cat test.conf | grep -v '^\s*$' | grep -v '^\s*#' | grep "key02" | sed -r s:'key02='::
value02
[root@centos85 ~]#

以上

广告
将在 10 秒后关闭
bannerAds