Shell - 在特殊字符之间打印文本

Shell - Print Texts inbetween Special Characters

如何只显示名为 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 }'

我只想显示 /var/www/html/index.html

使用 sed

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

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


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

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