Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux sed命令在多个for循环中的使用_Linux_Bash - Fatal编程技术网

Linux sed命令在多个for循环中的使用

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

我正在编写一个shell脚本,如下所示:

#!/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相关的所有条目。。我需要打印其他号码。请帮助。更新答案,因为我没有正确理解问题。您的编辑符合我的目的。非常感谢。还有别忘了弗洛林。。。谢谢各位。。你太棒了。:)