我对命令行和脚本文件界面之间的切换这个主题感到困惑。我在命令行中编写了一个很好的脚本,可以运行,但是当我想将其保存到 .sed 文件时,我记得我不能再使用-n
.sed文件了。我尝试使用“!d”标志,但没有得到相同的输出。我的问题:
有没有办法将其放入-n
.sed 文件中,或者当我处于脚本文件界面时有其他方法来停止自动打印?我讨厌必须从保护我的脚本免受 shell 转换为不保护它,但我想没有办法解决它吗?
答案1
标准(POSIX)方法是#n
在脚本的开头。它们必须是脚本的前两个字节。
这排除了 she-bang 的使用,它只能用于运行的脚本sed -f the-script
(请注意,she-bangs 不是 POSIX 并且 POSIX 不指定实用程序的路径),但正如 @Kusalananda 所说,当使用 she -bang,你总是可以这样做:
#! /path/to/sed -nf
如果您想sed
在支持带参数的 she-bangs(大多数)的系统上制作可执行脚本。
请注意,它#n
也适用于命令行,如下所示:
sed '#n
s/foo/bar/p'
您可以在“喜欢”之后添加更多文本:
#no default output
s/foo/bar/p
或者:
#nifty way to turn -n on
s/foo/bar/p
实际上,这是需要记住的事情,以避免-n
错误打开。#
为此(以及为了易读性),在注释后使用空格是个好主意。
# no, I don't want to turn -n on
s/foo/bar/
答案2
sed [-e] 'command'
并且sed -f /path/to/script
对于-n
开关的行为方式完全相同。如果您想执行sed
脚本并关闭“默认打印”行为,请使用sed -n -f /path/to/script.sed /path/to/input
.
答案3
您必须sed
使用以下命令运行脚本
$ sed -n -f script.sed
或者将#!
脚本中的 ("hash-bang") 行更改为类似的内容
#!/usr/bin/sed -nf
并运行它
$ ./script.sed