[英]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.