【发布时间】:2016-05-14 09:47:00
【问题描述】:
我在 Stack Overflow 上搜索了几个问题和答案,但没有一个适用于我的情况,而且我不知道为什么我的正则表达式不起作用。如果您能指出我的错误想法,我将不胜感激。
测试用例:文本文件包含
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)。 AND 指示哪个搜索目标。也许您将不得不使用
sed '/AllenZhou/d'。谢谢,祝你好运。 -
sed -i -n /pattern/d将删除您的文件 - 可能不是您想要的! -
google shell 引用约定很快,因为您需要在默认情况下引用您的变量,并且只有在您有特定目的并完全理解所有含义的情况下才不要引用它们。如果你不开始引用你的变量,你很快就会看到一些奇怪的、危险的影响。
标签: bash shell sed grep command