我在Stack Overflow上搜索了几个问题和答案,但是它们都不适用于我的情况,我不知道为什么我的正则表达式不起作用。如果你能指出我错误的想法,我会非常感激。从一行中找到确切的单词并用grep/sed删除那一行
测试用例:文本文件包含
AllenZhou:9175186661:111th 1111 NY, 11111
XiaoyuZhou:9175186662:2222 222th 22222 NY 22222
Allen:1231231234:abc rd, PA
这里是我的功能:
checkEntry(){
vaildName=true
while read entry
do
if $(echo $entry | grep --quiet $name)//$name read from keyboard
then
vaildName=false
fi
done < $fileName
}
如果我进入Zhou
,我的函数将返回两个AllenZhou
,并XiaoyuZhou
。我做了小的研究之后,我改变了grep命令参数
if $(echo $entry | grep --quiet ^$name:$)
事实证明,它从来没有发现任何东西AllenZhou
或XiaoyuZhou
–我很困惑。
sed -i -n /$name/d $fileName
这是我用来删除包含字符串模式的行的代码。问题和grep一样,如果我输入Zhou
或Allen
,该命令将删除包含关键字的两行。但是,当我改变
sed -i -n /\<$name\>/d $fileName
它不会删除AllenZhou
或XiaoyuZhou
或Zhou
...我再一次感到困惑。
根据您的样本输入(编辑您的Q),请显示您的预期输出。并指明哪个搜索目标。也许你将不得不使用'sed'/ AllenZhou/d''。谢谢,祝你好运。 – shellter
'sed -i -n/pattern/d'将会删除你的文件 - 可能不是你想要的! –
谷歌外壳的引用惯例很快,因为你需要引用你的变量默认情况下,如果你有一个特定的目的,这样做,并完全理解所有的影响,只留下他们不加引号。如果你不开始引用你的变量,你很快会看到一些奇怪的,危险的影响。 –