Bash 过滤掉shell中文件中匹配的记录

Bash 过滤掉shell中文件中匹配的记录,bash,shell,unix,awk,Bash,Shell,Unix,Awk,我有一个文件text.txt,记录如下: xyz[4.3],default, harry[1.0],default, molly[1.1],default, abc[1.0],rome, abc[1.1],rome, abc[1.2],rome, abc[1.4],rome, abc[2.1],default, abc[2.2],default, ghi[1.0],moon, ghi[1.1-Test],moon, def[3.9],default, def[4.2],def

我有一个文件text.txt,记录如下:

xyz[4.3],default,
harry[1.0],default, 
molly[1.1],default, 
abc[1.0],rome, 
abc[1.1],rome, 
abc[1.2],rome, 
abc[1.4],rome,
abc[2.1],default, 
abc[2.2],default,  
ghi[1.0],moon, 
ghi[1.1-Test],moon, 
def[3.9],default,
def[4.2],default,
现在,我将输入一个记录名作为变量,基于该变量,这些记录将被过滤到新文件中

例: 对于上面的text.txt文件,如果我输入abc,rome作为变量,outputfile.txt应该只有以下记录:

abc[1.0],rome, 
abc[1.1],rome, 
abc[1.2],rome, 
abc[1.4],rome,
我试过:

final_order=$(awk -F/ -v RS=',|\n' \
  'FNR==NR{a[$1] = (a[$1])? a[$1] "," $0 : $0 ; next}
  {s = (s)? s "," a[$1] : a[$1]}
  END{print s}' ./temp/test.txt ./temp/variable)

在bash中使用参数展开为grep创建正则表达式:

search=abc,rome
grep "^${search/,/\[[^]]*\],}" text.txt
扩展将逗号替换为
\[^]*\],
,它与
[
匹配,而不是与
]
匹配,
]
本身和逗号匹配。

使用awk可以执行以下操作:

awk -v s='abc,rome' 'BEGIN{sub(/,/, "[^,]*&", s)} $0 ~ s' test.txt
abc[1.0],rome,
abc[1.1],rome,
abc[1.2],rome,
abc[1.4],rome,

sub(/,/,“[^,]*&”,s)
将搜索词
abc,rome
转换为
abc[^,]*,rome
,,在这种情况下,我认为最简单的是:

awk'/,rome/'文件
abc[1.0],罗马,
abc[1.1],罗马,
abc[1.2],罗马,
abc[1.4],罗马,


嗨,anubhav,我们如何将o/p写入一个文件,以及如果我只有abc作为搜索词而不是abc,我们如何重新编写awk语句作为搜索词使用:
awk-v s='abc''BEGIN{sub(/,/,“[^,]*&”,s)}$0~s'test.txt>output.txt
其中
>output.txt
用于将输出重定向到文件。