首页 > 解决方案 > Shell - 在特殊字符之间打印文本

问题描述

如何只显示名为 file.pp 的文件中/var/www/html/index.html的输出,如下所示:

file {'/var/www/html/index.html':
  ensure  => 'file',
  content => "Hello World!\n",
}

到目前为止,我只能让它显示输出'/var/www/html/index.html':通过使用命令

cat file.pp | grep file | awk -F '{' '{print $2}'

我只希望它显示/var/www/html/index.html

标签: bashshellawksh

解决方案


用 sed

sed -n "s/^file.*'\(.*\)'.*$/\1/ p" file

在命令主体周围使用双引号,这很方便,因为我们在文本中查找单引号。将要提取的部分括在括号中,仅在单引号之间。在替换部分,我们将此部分称为\1,这是我们匹配的第一个也是唯一的模式(),我们只打印这个。-n表示不打印行,最终p表示仅打印匹配和替换的行。


或者使用 awk(正如 @markp-fuso 已经建议的那样),使用引号作为分隔符并在匹配行开头时打印第二个字段:

awk -F"'" '/^file/{print $2}' file

推荐阅读