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