Bash sed从文件中删除行无效

Bash sed从文件中删除行无效,bash,shell,sed,Bash,Shell,Sed,我正在尝试从具有匹配ID号的文本文件中删除一行 学生id变量:$sid,例如12345678; $FILE=学生记录 我首先尝试: sed -i '/$sid/d' student_record.txt 这给了我找不到的文件。下一步: sed -i '/$sid/d' $FILE 我得到:sed:1:“学生记录”:正则表达式中未终止的替换 sed -i '/12345678/d' $FILE 与上述错误相同 sed -i '/$sid/ d' student_record.txt 收益率

我正在尝试从具有匹配ID号的文本文件中删除一行

学生id变量:
$sid
,例如
12345678
$FILE
=
学生记录

我首先尝试:

sed -i '/$sid/d' student_record.txt
这给了我找不到的文件。下一步:

sed -i '/$sid/d' $FILE
我得到:
sed:1:“学生记录”:正则表达式中未终止的替换

sed -i '/12345678/d' $FILE
与上述错误相同

sed -i '/$sid/ d' student_record.txt
收益率:

sed 1: "student_record.txt": bad flag in substitute command: 'x'
如果我尝试不使用
-I

sed '/$sid/ d' $FILE
它只打印整个文件,不删除任何行


建议会很好。

如果该文件被称为
学生记录
,正如您所说的
$file
,您可能在使用
student\u record.txt
时犯了一个错误,这将在您找到
文件时进行解释

对于许多其他变量,如果使用单引号,它将不会展开变量,因此您将实际查找字符串“$sid”。如果使用双引号,它将展开,请尝试

sed -i "/$sid/d" "$FILE"

假设您已使用GNU。如果您使用的是没有GNU的文件,您可能没有
-i
,或者它可能需要一个参数。

如果文件名为
student\u record
,就像您为
$file
所说的那样,那么您可能在使用
student\u record.txt
时犯了一个错误,这将在您得到
未找到文件时进行解释

对于许多其他变量,如果使用单引号,它将不会展开变量,因此您将实际查找字符串“$sid”。如果使用双引号,它将展开,请尝试

sed -i "/$sid/d" "$FILE"

假设您已使用GNU。如果您使用的是没有GNU的设备,那么您可能没有
-i
,或者它可能需要一个参数。

是的,我正在使用Mac OSX,所以我刚才看了一下,有一个答案说您“需要为备份提供扩展”,因此对于sed命令,它应该是sed-i'/$sid/d“$FILE,这似乎很有效!谢谢你的提示:)是的,我正在使用Mac OSX,所以我刚看了一下,有一个回答说你“需要为备份提供扩展”,所以对于sed命令,它应该是sed-I“”“/$sid/d”$FILE,这似乎很有效!谢谢你的提示:)