我有几个文件在一个目录中具有类似的结构:
....
....
pattern one
some information Important-1
....
....
pattern two
line1
line2
line3
line4
line5
Important-2 some information
....
....
我需要文件中两个特定行的(重要)信息。
此命令对我有效sed -n '/pattern two/{ n; n; n; n; n; p }; /pattern one/{n; p }' * > output.txt
它会给我这样的输出:
some information Important-1
Important-2 some information
我怎样才能修改命令,使输出看起来像这样没有额外的信息?
Important-1 Important-2
基本上,我只需要从第一行的末尾开始的n个字符,以及从第二行的开头开始的n个字符。
最好的办法是什么?
2条答案
按热度按时间ibps3vxo1#
假设你想保留11个尾随/前导字符,你可以尝试(用GNU
sed
和macOS Ventura附带的sed
测试):当一行匹配
pattern one
时,我们读取下一行并复制到hold space。当一行匹配pattern two
时,我们读取下5行,将hold space复制到模式空间,追加一个换行符和下一行,用11char-space-11char
替换X-11char-newline-11char-Y
并打印。xghobddn2#
记住,
sed
在修改一行代码时非常强大。当你需要与前一行代码进行逻辑处理时,awk
通常更好。如果有更多的文件,请使用类似