我究竟如何创建 sed 脚本并使用它来编辑文件?

Joh*_*ohn 23 command-line bash sed

我知道如何使用 sed 一步一步地编辑文件,但是我将如何创建一个实际的 sed 脚本,然后在文件上使用它来执行单个 sed 命令会执行的相同操作?例如这 3 个 sed 命令:

sed -i '4i\' 培根文件

sed -i 's/,/\t\t/' 培根文件

sed -i 's/,//' 培根文件

slm*_*slm 27

将命令放入文件

将这些行放在名为script.sed.

4i\ 
s/,/\t\t/
s/,/ /
Run Code Online (Sandbox Code Playgroud)

然后像这样运行它:

$ sed -i -f script.sed baconFile
Run Code Online (Sandbox Code Playgroud)

制作一个独立的 sed 脚本

如果您希望它是单个可执行文件,请执行以下操作:

#/bin/bash

sed -i '
4i\ 
s/,/\t\t/
s/,/ /
' "$@"
Run Code Online (Sandbox Code Playgroud)

将上述行放入名为 的文件中script.bash,使其可执行 ( chmod +x script.bash,然后像这样运行它:

$ script.bash baconFile
Run Code Online (Sandbox Code Playgroud)

创建脚本文件

你可以用这个方法来制作我上面提到的文件。

$ cat > script.bash <<EOF
#!/bin/bash

4i\ 
s/,/\t\t/
s/,/ /
EOF
Run Code Online (Sandbox Code Playgroud)

这将制作脚本文件。您可以使用以下命令进行确认:

$ cat script.bash
#!/bin/bash

4i\ 
s/,/\t\t/
s/,/ /
Run Code Online (Sandbox Code Playgroud)

  • 可以使用 shebang 行 `#!/usr/bin/sed -f -` 将 sed 脚本编写为可调用脚本。编辑:实际上这似乎取决于 sed 的实现。GNU sed 似乎不支持`-f -`,这可能是现在大多数人都在使用的。实际上,BSD sed 也不支持,但 AIX sed 支持。去搞清楚! (3认同)

llu*_*lua 6

sed -i '4i\ 

s/,/\t\t/

s/,/ /' baconFile
Run Code Online (Sandbox Code Playgroud)

sed 像大多数解释器一样工作,多个命令可以在单独的行上或由;. 如果你没有GNU sed你的第一行可能会导致错误。


要创建一个 sed 脚本,你只需在你的 shebang 中给出你的 sed 解释器的绝对路径。并确保该文件是可执行的。

#!/bin/sed -f
s/foo/bar/

chmod u+x foo
./foo <<<foo
bar
Run Code Online (Sandbox Code Playgroud)

或者脚本可以与 sed 命令一起调用。 sed -i -f foo file

  • +1 使用正确的 shebang ......(你为什么要启动 bash 只是为了启动 sed ???) (3认同)