我怎样才能让 grep 显示一行忽略我想要的词?
How can i make grep show a line ignoring the words i want?
我正在尝试将 grep 与 pwd
命令一起使用。
所以,如果我输入 pwd
,它会显示如下内容:
/home/hrq/my-project/
但是,为了我正在制作的脚本,我需要将它与 grep 一起使用,所以它只打印 hrq/
之后的内容,所以我需要始终隐藏我的主文件夹(/home/hrq/
) 摘录,并仅显示后续内容(例如,在本例中,仅显示 my-project
)。
可能吗?
我试过
pwd | grep -ov 'home'
,因为我看到“-v”标志将等同于 NOT 运算符,并将它与“-o”唯一匹配标志结合起来。但是没用。
使用grep -Po 'hrq/\K.*'
,例如:
grep -Po 'hrq/\K.*' <<< '/home/hrq/my-project/'
my-project/
此处,grep
使用以下选项:
-P
: 使用 Perl 正则表达式。
-o
:仅打印匹配项(每行 1 个匹配项),而不是整行。
\K
:使正则表达式引擎“保留”它在 \K
之前匹配的所有内容,而不将其包含在匹配中。具体来说,打印匹配项时忽略正则表达式的前面部分。
鉴于:
$ pwd
/home/foo/tmp
$ echo "$PWD"
/home/foo/tmp
根据您真正想做的事情,这些中的任何一个可能是您真正应该使用的,而不是尝试使用 grep:
$ basename "$PWD"
tmp
$ echo "${PWD#/home/foo/}"
tmp
我正在尝试将 grep 与 pwd
命令一起使用。
所以,如果我输入 pwd
,它会显示如下内容:
/home/hrq/my-project/
但是,为了我正在制作的脚本,我需要将它与 grep 一起使用,所以它只打印 hrq/
之后的内容,所以我需要始终隐藏我的主文件夹(/home/hrq/
) 摘录,并仅显示后续内容(例如,在本例中,仅显示 my-project
)。
可能吗?
我试过
pwd | grep -ov 'home'
,因为我看到“-v”标志将等同于 NOT 运算符,并将它与“-o”唯一匹配标志结合起来。但是没用。
使用grep -Po 'hrq/\K.*'
,例如:
grep -Po 'hrq/\K.*' <<< '/home/hrq/my-project/'
my-project/
此处,grep
使用以下选项:
-P
: 使用 Perl 正则表达式。
-o
:仅打印匹配项(每行 1 个匹配项),而不是整行。
\K
:使正则表达式引擎“保留”它在 \K
之前匹配的所有内容,而不将其包含在匹配中。具体来说,打印匹配项时忽略正则表达式的前面部分。
鉴于:
$ pwd
/home/foo/tmp
$ echo "$PWD"
/home/foo/tmp
根据您真正想做的事情,这些中的任何一个可能是您真正应该使用的,而不是尝试使用 grep:
$ basename "$PWD"
tmp
$ echo "${PWD#/home/foo/}"
tmp