我在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'將會刪除你的文件 - 可能不是你想要的! –
谷歌外殼的引用慣例很快,因爲你需要引用你的變量默認情況下,如果你有一個特定的目的,這樣做,並完全理解所有的影響,只留下他們不加引號。如果你不開始引用你的變量,你很快會看到一些奇怪的,危險的影響。 –