使用 sed 的 -e 选项从脚本运行 sed 失败

使用 sed 的 -e 选项从脚本运行 sed 失败

我的 sed 命令在命令行上运行良好,但当我将其放入 bash 脚本中并用

sed -e sedscript.sh

我明白了

$ sed -e sedscript.sh
sed: -e expression #1, char 12: unterminated `s' command

这是 sedscript.sh:

$cat sedscript.sh
sed 's/^ *[0-9]\+.//g' tictactoeold.py>tictactoenew.py

答案1

选项-esed输入有效的 sed 表达,不是包含命令的文件名sed,该-f选项用于包含有效sed表达式的文件名。

就你的情况而言:

sed -e sedscript.sh

被视为替换(s)操作,因为sed表达式以 开头s,以e作为(替换)的分隔符s,并且sed正确地抱怨未终止的s(替换)命令。

玩得开心:

% sed -e sedscript.sheFOOe <<<'dscript.shBAR'
FOOBAR

你可以做什么:

  • 你的文件必然是一个 shell 脚本,你可以简单地执行它,如下所示

  • 用于-e直接将表达式放在命令行上,-e但不是严格需要的:

     sed 's/^ *[0-9]\+.//g' tictactoeold.py >tictactoenew.py 
    
     sed -e 's/^ *[0-9]\+.//g' tictactoeold.py >tictactoenew.py 
    
  • 使用该-f选项,只保留sed文件中的表达式,即将文件制作sedscript为:

    s/^ *[0-9]\+.//g
    

    然后使用sed以下命令:

    sed -f sedscript tictactoeold.py >tictactoenew.py
    

相关内容