在编写 munin 脚本时,我经常需要解析配置文件以寻找一些路径。
没有强标记(即不是 XML)的配置文件的问题是这些路径可以有多种语法:
- 单引号 (') 或双引号 (") 或不带引号
- 包含空格(如果字符串未加引号,则转义)
- 包含引号(通常是单引号)
例如,我正在寻找一种方法来解析以下行以提取路径(这一次,在第一个位置):
/mnt/DirWithoutSpaces/ "Dir1" cnidscheme:dbd perm:0775 options:usedots,upriv
/mnt/Dir\ With\ Space/ Dir2 cnidscheme:dbd options:usedots,upriv
"/mnt/Dir With Space And D-quote" Dir3
'/mnt/Dir With Space And S-quote' Dir4
~/ "Dir 5" cnidscheme:dbd
"/mnt/Dir'ed" "Dir 6" cnidscheme:dbd
我通常会使用bash 运算符 ( ) ERE
,但每次都让我头疼。=~
[[ $string =~ $pattern ]]
我很确定任何变量修饰,,,cut
都awk
可以sed
非常有用并自动处理引号和其他东西,但我找不到那个特殊的神奇配方。