我可以使用打印文件的第一行
sed -n 1p file.txt
Run Code Online (Sandbox Code Playgroud)
我可以使用删除文件的第一行
sed -i 1d file.txt
Run Code Online (Sandbox Code Playgroud)
有没有办法打印和删除sed?有点像 FIFOpop()或 Perl 的shift.
Gil*_*il' 11
您可以使用该命令w将一些行写入不同的输出文件。在 Linux 和许多其他 unix 变体上,/dev/stdout是程序的标准输出,这不是 sed 使用-i选项写入的地方。如果您的系统没有/dev/stdout或类似的变体/dev/fd/1,您可以写入命名管道。
sed -i -e '1 w /dev/stdout' -e '1d' file.txt
Run Code Online (Sandbox Code Playgroud)
这个答案是吉尔斯答案的延伸。
需要将地址写入两次并不是很“DRY”,虽然对于仅删除第一行的示例来说它工作得很好,但如果您对要从文件中“提取”的行有更复杂的搜索模式,则该方法会变得更成问题。您可以使用花括号对同一地址执行w和命令,而不是两次写入地址。d使用原来的例子,看起来像这样:
sed -i -e '1{w /dev/stdout' -e 'd}' file.txt
Run Code Online (Sandbox Code Playgroud)
或者更一般地说:
sed -i -e '/some long regex/{w /dev/stdout' -e 'd}' file.txt
Run Code Online (Sandbox Code Playgroud)