繁体   English   中英

awk 在匹配的图案前打印整行

[英]awk print full line before the matched pattern

所以我知道有很多帖子试图解决这个问题; 但是,我还没有成功地实现这一点:所以我有一个脚本,它告诉我我的 bash 脚本所在的目录,这是我从另一篇文章中获取的:

#SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
/home/vMX-ENV/vMX-21.1R1/scripts/boot

我试图从结果中删除/scripts/boot目录,所以它最终会是:

/home/vMX-ENV/vMX-21.1R1/

I am trying to use awk as my solution, I know there are other commands like grep or perl but I rather use awk just to keep it consistent. 有谁知道我怎样才能做到这一点? 我有很多不成功的尝试

有人在另一个帖子上建议使用

awk '/foo/{if (a && a !~ /foo/) print a; print} {a=$0}' file

但我无法让它工作。 此外,我对 bash 没有太多经验,所以我想不出解决它的方法。 有什么帮助吗?

你的问题不清楚,但也许这就是你想要做的,即只是用你的脚本存在的目录2级以上的目录的路径填充 SCRIPT_DIR?

SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/../.." &> /dev/null && pwd )"

这是一个删除尾随部分的 AWK 命令:

$ echo /home/vMX-ENV/vMX-21.1R1/scripts/boot | awk 'match($0, "/scripts/boot$") { print substr($0, 1, RSTART - 1) }'
/home/vMX-ENV/vMX-21.1R1

您可以使用sed awk如:

echo /home/vMX-ENV/vMX-21.1R1/scripts/boot | sed 's/scripts\/boot$//'

这将为您提供 output:

/home/vMX-ENV/vMX-21.1R1/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM