Bash 什么';这有什么问题吗?(正在尝试删除一行)

Bash 什么';这有什么问题吗?(正在尝试删除一行),bash,sed,Bash,Sed,我是bash新手,我正在尝试删除我正在创建的文件中的一行 因此,毋庸置疑: if [[ $(ls -1 | grep 'fichiers.toCheck' | wc -l) -eq 0 ]]; then touch fichiers.toCheck fi find . -name '*.mp4' > fichiers.toCheck while read p; do echo $p sed -i "$p/d" ./fichiers.toCheck done <fichie

我是bash新手,我正在尝试删除我正在创建的文件中的一行

因此,毋庸置疑:

if [[ $(ls -1 | grep 'fichiers.toCheck' | wc -l) -eq 0 ]]; then
touch fichiers.toCheck
fi

find . -name '*.mp4' > fichiers.toCheck

while read p; do
  echo $p
  sed -i "$p/d" ./fichiers.toCheck
done <fichiers.toCheck
我怀疑sed将行中的“/”解释为一个参数(该行类似于“/nosound.mp4”)

你猜怎么着

编辑2=正确的语法是-i.bak

sed -i.bak "s@$p@@" fichiers.toCheck 
编辑=以下是我的实验:

一,

二,

同样的错误:

sed: 1: "fichiers.toCheck": invalid command code f

您的
sed
语法错误,无法从
bash
变量中删除包含模式的行。在
OSX
中使用
FreeBSD
native
sed
时,请使用
-i.bak
进行就地编辑

sed -i.bak "/$p/d" fichiers.toCheck
如果怀疑变量包含
/
,请将
sed
分隔符更改为
@
,并使用传统模式
s//
样式,将替换零件设置为空,即

sed -i.bak "s@$p@@" fichiers.toCheck

语法是n
d
,例如
15d
,或者
regexp
/d
,例如
/Blondie/d
。我编辑了我的帖子来回答你!顺便说一句,你可以检查文件是否存在,如果[!-e file]],然后触摸file;fi或者在一行
[!-e file]]&&touch file
我必须说,我根本没有遵循您的逻辑:(如果文件不存在,您可以触摸它,但是可以使用find命令以任何方式覆盖它(如果它已经存在,那就太糟糕了)。然后您希望循环文件中的所有值,并同时从同一文件中主动删除这些值。即使它起作用,您最终也会得到一个空文件。也许您需要解释一下您实际上在做什么,因为代码没有什么意义。@Kenneth:这是一个错误的语法,请尝试
sed-i.bak“s@$p@@fichiers.toCheck
Mmm仍然得到了无效的命令代码f:/BTW我在macOS上,不知道这是否会改变什么,但是。。。
sed -i "@$p@d" fichiers.toCheck
sed: 1: "fichiers.toCheck": invalid command code f
sed -i.bak "/$p/d" fichiers.toCheck
sed -i.bak "s@$p@@" fichiers.toCheck