bash - 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
解决方案
用 sed
sed -n "s/^file.*'\(.*\)'.*$/\1/ p" file
在命令主体周围使用双引号,这很方便,因为我们在文本中查找单引号。将要提取的部分括在括号中,仅在单引号之间。在替换部分,我们将此部分称为\1
,这是我们匹配的第一个也是唯一的模式()
,我们只打印这个。-n
表示不打印行,最终p
表示仅打印匹配和替换的行。
或者使用 awk(正如 @markp-fuso 已经建议的那样),使用引号作为分隔符并在匹配行开头时打印第二个字段:
awk -F"'" '/^file/{print $2}' file
推荐阅读
- javascript - 如何在 CSS 中实现数字递增动画
- list - 推理适用于 Coq 中 nat 列表的函数
- java - 复合设计模式:实施的例子对与否?如果没有,则提供有关需要更改的建议
- flutter - 如何将文件添加到数组(列表):Flutter
- dataframe - Julia CSV 跳过行
- javascript - 了解 HTTP 状态响应
- c# - 有没有办法将数据从 Powershell 脚本的一个进程传递到同一脚本的另一个已经运行的进程?
- javascript - 如何解决FlatList React native中的Key问题
- electron - Electron:第二次调用时访问单个实例的浏览器窗口
- sql - Ef core search on child , order on parent