簡體   English   中英

如何通過以下命令將bash變量傳遞到GREP regex中?

[英]How can I pipe a bash variable into a GREP regex in the following command?

我有一個可以正常運行的命令,如下所示:

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更改$var所需的值即可。

如果我對它的理解正確,則您需要以下內容:

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

如果您打算單線報價,那就是您的朋友:

X=123 /bin/sh -c 'grep ","$X"$" xyz.txt | grep -v "^"$X","$X"$"'

單個grep命令可以與否定性后面使用:

$ cat xyz.txt 
12,12
112,12
1,12
42,12

$ grep -P '(?<!^12),12$' xyz.txt
112,12
1,12
42,12

傳遞變量很棘手

$ x=12
$ grep -P "(?<!"^$x"),"$x"$" xyz.txt
112,12
1,12
42,12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM