bash - 在同一行的特定单词之后提取一个单词,但它们之间没有空格
问题描述
如何提取 bash 中特定单词之后的单词?更准确地说,我有一个文件,其中有一行如下所示:
IN=../files/d.txt
我想从上面的行中读取“d”。
awk '{for(i=1;i<=NF;i++) if ($i=="files/") print $(i+1)}' inputFile
这段代码对我没有帮助,因为它试图在空格后到达单词。但这里我们在“files/”(续字)之后有“d”,并以“.”结尾。
解决方案
您可以使用sed
:
sed -n '/\/files\// s~.*/files/\([^.]*\)\..*~\1~p' file
d
你也可以使用awk
命令:
awk -F/ '$(NF-1) == "files"{sub(/\..*/, "", $NF); print $NF}' file
推荐阅读
- r - R闪亮的交替动作按钮
- node.js - 为什么我的 Discord.js 机器人在用户数少于 500 的服务器上响应时间超过 5 分钟?
- python - 无法在数据流中运行熊猫
- datagridview - 未附加特定数据源时使用 text_changed 过滤 datagridview 的行
- java - 我们可以在 log4j 信息中包含构建日期和版本吗
- jquery - JQuery Drag to sortable resizes to the containers width in jsfiddle 但不是在 MVC 应用程序中
- api - Dependabot nuget 拉取请求
- ruby-on-rails - 有没有办法仅在模型跳过验证时有条件地运行 rails 回调?
- macos - 无法通过 Mac 终端与 com.apple.quarantine'd 文件交互?
- sql - 有没有办法在 Spark SQL 中用空值替换空数组结构?