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

Bash Shell-在特殊字符之间打印文本,bash,shell,awk,sh,Bash,Shell,Awk,Sh,如何仅显示名为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 $

如何仅显示名为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}'
我只希望它用sed显示/var/www/html/index.html

sed -n "s/^file.*'\(.*\)'.*$/\1/ p" file
在命令体周围使用双引号,这很方便,因为我们在文本中查找单引号。将要提取的部分括在括号中,该部分正好位于单引号之间。在替换零件中,我们将此零件称为
\1
,这是我们与
()
匹配的第一个也是唯一一个图案,我们仅打印此图案
-n
表示不打印行,最后的
p
表示只打印匹配和替换的行


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

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

sed -n "s/^file.*'\(.*\)'.*$/\1/ p" file
在命令体周围使用双引号,这很方便,因为我们在文本中查找单引号。将要提取的部分括在括号中,该部分正好位于单引号之间。在替换零件中,我们将此零件称为
\1
,这是我们与
()
匹配的第一个也是唯一一个图案,我们仅打印此图案
-n
表示不打印行,最后的
p
表示只打印匹配和替换的行


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

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

您发布的代码段中出现了两次
file
,是否始终要检索第一行?请尝试使用
cat file.pp | grep file | awk-F'{{print$2}cut-d:-f1
仅基于(简单)示例输入和OPs测试代码:
awk-F''/^file/{print$2}'file.pp
=>使用单引号作为输入字段分隔符,然后对于以
^file
开头的任何行,打印第二个字段;请记住,如果有多行以
^file
开头,这将生成多行输出;这还假设所需字段始终与
^file在同一行并始终包装在一对单quotes@redInk恐怕该命令仍在显示带有单引号的输出,因为在您发布的代码段中出现了两次
file
,是否始终要检索第一行?请尝试使用
cat file.pp | grep file | awk-F'{''{''{print$2}“| cut-d:-f1
仅基于(简单)样本输入和OPs测试代码:
awk-F”“/^file/{print$2}”'file.pp
=>使用单引号作为输入字段分隔符,然后对于以
^file
开头的任何行,打印第二个字段;请记住,如果有多行以
^file
开头,这将生成多行输出;这还假设所需字段始终与
^file在同一行并始终包装在一对单quotes@redInk恐怕该命令仍然显示在hank you@thanasisp中带有单引号的输出。您能解释一下1的作用吗?1是指第一次出现,而$是指行的结尾吗?Kev看到了吗:在第一部分中,我们在零件周围和替换处用括号括起来我们以
\1
\2
等形式访问它们。因此
\1
这里指的是我们在
()
中拥有的第一个也是唯一的部分,只是为了让人们知道,还有另一种方法可以通过使用实现这一点:
cat file.pp | awk-F“'”NR==1{print$2}“
这叫做感谢@thanasisp。你能解释一下1是什么吗?1是指第一次出现,而$是指行的结束吗?Kev看到了:在第一部分中,我们在零件周围放上括号,在替换零件处,我们将它们作为
\1
\2
等访问。因此
\1
这里只是指第一个和唯一的我们在
()
中有一部分是为了让人们知道,还有另一种方法可以通过使用来实现这一点:
cat file.pp | awk-F““'NR==1{print$2}”
,这就是所谓的