这个sed有什么问题? (尝试删除一行)

时间:2017-02-22 10:55:02

标签: 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 <fichiers.toCheck

控制台正在给我这个:

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

我怀疑sed将行中的“/”解释为参数(该行类似于“./nosound.mp4”。

你的猜测是什么?

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

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

编辑=所以这是我的实验:

1

while read p; do
  echo $p
  sed -i "/$p/d" fichiers.toCheck
done <fichiers.toCheck

我得到了:

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

2

sed -i "@$p@d" fichiers.toCheck

和同样的错误:

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

1 个答案:

答案 0 :(得分:1)

您的[plugin GetFilterIface] Returning filter: main.plgFilter {} GetFilterIface result: main.plgFilter {} <nil> Name: Bob Age: 23 语法错误,要从sed变量中删除包含模式的行。同时在bash中使用FreeBSD原生sed使用OS X进行就地编辑。

-i.bak

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

s/<pattern>/<replacement>/