在发现几个常用命令(例如read
)实际上是 Bash 内置命令(并且在提示符下运行它们时,我实际上正在运行一个两行的 shell 脚本,它只是转发到内置命令),我想看看是否相同对于true
和是真的false
。
好吧,它们绝对是二进制文件。
sh-4.2$ which true
/usr/bin/true
sh-4.2$ which false
/usr/bin/false
sh-4.2$ file /usr/bin/true
/usr/bin/true: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=2697339d3c19235
06e10af65aa3120b12295277e, stripped
sh-4.2$ file /usr/bin/false
/usr/bin/false: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b160fa513fcc13
537d7293f05e40444fe5843640, stripped
sh-4.2$
Run Code Online (Sandbox Code Playgroud)
然而,我发现最令人惊讶的是它们的大小。我希望他们只是每一字节数,因为true
基本上是exit 0
和false
是exit 1
。
sh-4.2$ true …
Run Code Online (Sandbox Code Playgroud) 如何sed
在匹配后删除两行(或任何数字)但不包括匹配和中间的行?
例如:
Enter command below
> login
Command valid
Enter your password at the below prompt
Remember to make sure no-one is looking at your screen
> mysecretword
Password accepted
Run Code Online (Sandbox Code Playgroud)
我只想删除“> mysecretword”行,因为它是“在下面的提示下输入您的密码”行之后的两行。我不能使用绝对行号位置,因为匹配可以在文件开始后出现任意数量的行。
在线搜索我找到了很多解决方案,例如sed '/Enter your password.*/,+3d' filex
,但这也会删除“输入您的密码...”行和以下行,这不是我想要的。我只想删除一行,这是匹配后一定数量的行。
我如何使用sed
(或实际上任何其他常用工具)来做到这一点?