![]() |
1
4
这可能对你有用(GNU sed):
所有sed命令都可以以地址或正则表达式作为前缀。地址可以是行号或
正常的sed循环在模式空间中显示每一行输入(减去换行符)。然后应用sed命令,循环的最后一步是重新附加换行符并打印结果。
这个
这个
因此,上述解决方案打印第一行和最后一行,并删除其余行。
Sed有一些命令行选项,其中之一是隐式打印模式空间的结果
注意:如果输入文件只有一行,则第一个解决方案将只打印一行,而第二个解决方案会打印同一行两次。此外,如果输入了多个文件,两个解决方案都将打印第一个文件的第一行和最后一个文件的最后一行,除非
|
![]() |
2
2
这将奏效:
作为建议,请查看
info sed
,不仅
|
![]() |
3
1
第一行:
最后一行:
|
![]() |
4
1
根据您的新要求,如果输入文件只有1行,则不输出任何内容(请参阅 How to find only the first and last line of a file using sed ):
原始答案: 从表面上看,这是你在sed中可以很容易做到的事情之一:
但是,如何处理像一行输入这样的边缘情况并不明显,例如,这真的是正确的输出吗:
或者正确的输出只是:
如果是后者,如何调整sed命令以产生输出@potong建议使用GNU sed命令:
它可以工作,但可能仅适用于GNU(idk),更重要的是,它看起来与我们开始使用的命令不太一样,因此需求的最小变化意味着使用不同的构造进行完全重写。
现在,如果你想增强它,比如说,如果文件包含
当你可以使用像awk这样的不同工具,并以简单、一致、可移植的语法做任何你喜欢的事情时,学习如何使用sed是毫无意义的:
请注意:
现在,如果你想对多个文件这样做,比如用以下命令创建的文件,该怎么办?
使用awk,您可以将行存储在数组中,以便在END中打印:
或者使用GNU awk,您可以从ENDFILE打印它们:
与sed?留给读者的练习。 |
![]() |
John Smith · 在特定行的末尾添加文本 3 年前 |
![]() |
Waddah Shamroukh · 使用sed将字符串替换为变量 3 年前 |
![]() |
DAG · bash使用sed在文件的第一个位置插入单词 3 年前 |
![]() |
nickcrv06 · 在两个常量字符串之间提取单词 3 年前 |
![]() |
DevOps_Engg · 使用sed提取路径值子字符串 3 年前 |