gpt4 book ai didi

regex - 如何在以下命令中将 bash 变量通过管道传输到 GREP 正则表达式中?

转载 作者:行者123 更新时间:2023-11-29 09:39:38 25 4
gpt4 key购买 nike

我有一个运行良好的命令,如下所示:

grep ",162$" xyz.txt | grep -v "^162,162$"

它基本上是在寻找具有类似“number,162”模式的行,但数字为 162 的行除外。

现在,我想运行许多这样的命令,其中 162 被替换为其他数字,例如

grep ",$159" xyz.txt | grep -v "^159,159$"
grep ",$111" xyz.txt | grep -v "^111,111$"

.. 等等,命令的每个部分都出现相同的数字。因此,我需要一个地方来更改值,而命令的其余部分可以在任何需要的地方使用该值。

我尝试做这样的事情来重复我想尝试另一个数字时需要做的更改数量

x=162 | grep ",\$x$" xyz.txt | grep -v "^\$x,\$x$"

但它不起作用。我应该做些什么更改,以便每次我必须更改数字值时,我只需转到命令的第一个位置并仅更改 x 的值?

最佳答案

无论何时将 grep 传递给 grep,请考虑使用 awk:

var=YOUR_NUM
awk -F, -v pat="$var" '$NF==pat && $1!=pat' file

这对 awk 的字段有一点作用:通过将字段分隔符设置为逗号,您就可以分别处理每个部分。
您想要匹配最后一个字段是给定值而第一个字段不是的情况。这可以通过对最后一个字段使用 $NF 而对第一个字段使用 $1 来实现。
此外,您可以通过检查 NF(字段数)并使条件类似于 !($1==pat && NF==2) && $NF 来添加额外的控制层==pat 以便打印像 162,162,162 这样的行。但这实际上取决于您想做什么。

例如:

$ cat file
hello
hello,162
162,162
$ val=162
$ awk -F, -v pat="$val" '$NF==pat && $1!=pat' file
hello,162

然后只需将 $var 更改为您想要的值即可。

关于regex - 如何在以下命令中将 bash 变量通过管道传输到 GREP 正则表达式中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39290330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com