1
我想刪除使用sed的文件的行,但我不想刪除這些行,除非搜索字符串完全匹配。即。使用sed刪除特定行而不刪除其他具有相同前綴的行
#!/bin/bash
set -x
file="list1"
index=0
while read line ;
do
if [ ! "$line" == "@@@" ];
then
MYARRAY[$index]="$line"
#index=$(($index+1))
let index++
else
break
fi
done < $file
#echo "MYARRAY is: ${MYARRAY[*]}"
#echo "The file: ${index}"
index1=0
for i in "${MYARRAY[@]}"
do
lineNumber=$((index1 + 1))
sed -i "/${MYARRAY[$index1]}/d" "$file"
let index1++
done
sed -i "/@@@/d" "$file"
#remove empty lines
sed -i '/^$/d' "$file"
所以我有一個測試文件(列表1):
line1
line2
line3
line4
line5
line6
@@@
line1_1
line2_1
和腳本運行後我結束了,因爲「一號線」和2" 號線全部刪除行也匹配‘line1_1’和「line2_1」
任何幫助,將不勝感激!!
很酷 - 謝謝。這只是一個測試腳本,我需要進行行操作,然後只有在這些操作成功時才從供稿文件中刪除該行。我不知道該怎麼做,但其目的是將一個標記放入文本文件@@@,然後在該文件中建立一個直到該行的數組,然後執行操作,然後刪除每一行和@@@標記。然後該腳本將再次運行,同時添加到該文件的任何內容。 – ilium007
@ ilium007:啊,現在完全不同了! :-)考慮在開始處理文件時將文件重命名爲臨時名稱,讓它對它進行任何寫入都會創建一個新的空文件,並在完成讀取時刪除臨時文件。仍有競爭條件需要考慮,但這應該更接近可靠的解決方案。 –
很酷,謝謝@ jamey-sharp。現在閱讀比賽條件:) – ilium007