Linux sed命令在多个for循环中的使用
我正在编写一个shell脚本,如下所示:Linux sed命令在多个for循环中的使用,linux,bash,Linux,Bash,我正在编写一个shell脚本,如下所示: #!/bin/bash try="7200005781 8110892533 9585055818 9942609990 9943985228" filename="TAMILNADU,917373342777,POSTPAID TAMILNADU,917639403547,POSTPAID TAMILNADU,917639989185,POSTPAID TAMILNADU,917667882223,POSTPAID TAMILNADU,91801288
#!/bin/bash
try="7200005781
8110892533
9585055818
9942609990
9943985228"
filename="TAMILNADU,917373342777,POSTPAID
TAMILNADU,917639403547,POSTPAID
TAMILNADU,917639989185,POSTPAID
TAMILNADU,917667882223,POSTPAID
TAMILNADU,918012888899,POSTPAID
TAMILNADU,918098909992,POSTPAID
TAMILNADU,917200005781,POSTPAID
TAMILNADU,918110892533,POSTPAID
TAMILNADU,919585055818,POSTPAID
TAMILNADU,919942609990,POSTPAID
TAMILNADU,919944040565,POSTPAID
TAMILNADU,919943985228,POSTPAID"
#echo -e "\n${try[@]}" -> works
#echo -e "\n" -> works
#echo -e "\n${filename[@]}" -> works
for j in "${try[@]}"
do
for k in "${filename[@]}"
do
sed -i 's/$j//g' $k > master.txt
done
done
我正在尝试匹配“try”和“filename”
如果“filename”中的“try”中有任意数量的匹配项
我需要从“文件名”中删除该条目
请帮我解决这个问题。如果您在文件中有记录,这很简单:
egrep -vf try filename
这是在现有脚本中执行此操作的一种方法,但需要编写一个文件
#!/bin/bash
try="7200005781
8110892533
9585055818
9942609990
9943985228"
filename="TAMILNADU,917373342777,POSTPAID
TAMILNADU,917639403547,POSTPAID
TAMILNADU,917639989185,POSTPAID
TAMILNADU,917667882223,POSTPAID
TAMILNADU,918012888899,POSTPAID
TAMILNADU,918098909992,POSTPAID
TAMILNADU,917200005781,POSTPAID
TAMILNADU,918110892533,POSTPAID
TAMILNADU,919585055818,POSTPAID
TAMILNADU,919942609990,POSTPAID
TAMILNADU,919944040565,POSTPAID
TAMILNADU,919943985228,POSTPAID"
echo "$filename" > /tmp/filename_zz.txt
echo "$try" | xargs -L 1 -I{} grep {} /tmp/filename_zz.txt
rm /tmp/filename_zz.txt
编辑:没有意识到我们想要删除这些项目,而不是匹配它们。。。用这些行替换上面脚本的最后3行。。。归功于@Florin
echo "$filename" > /tmp/filename_zz.txt
echo "$try" > /tmp/try_zz.txt
grep -F -vf /tmp/try_zz.txt /tmp/filename_zz.txt
rm /tmp/try_zz.txt
rm /tmp/filename_zz.txt
filename
上没有结束引号,sed上也没有单引号。可能还有其他问题。是的,我知道sed中有一些语法错误。是的,忘了关闭文件名。@tripleee严格地说,这不是重复的,因为op要求的是不匹配的行,而不是连接。@hack_on感谢您的评论。这是一个非常常见的任务,可能会找到一个不同的副本,更准确地回答这个具体案例,但我的搜索引擎昨天没有找到它。如果你找到更好的副本,请在这里链接。。这很有魅力。。但是,情况是通过变量使用它。我是否必须显式创建filename_zz.txt?或者只是运行代码就行了?您只需运行脚本,它就会创建文件,然后在完成后将其删除。如果我在echo中交换变量呢?echo“$try”>/tmp/filename_zz.txt echo“$filename”| xargs-L 1-I{}grep{}/tmp/filename_zz.txt实际上,您的代码会获取与try相关的所有条目。。我需要打印其他号码。请帮助。更新答案,因为我没有正确理解问题。您的编辑符合我的目的。非常感谢。还有别忘了弗洛林。。。谢谢各位。。你太棒了。:)