我想知道是否有一种简单的方法可以使用预先分配的行号对某些行进行操作。
假设我想输出文件的第 1 行、第 7 行、第 14 行和第 16 行,我可以简单地做
sed -n '1p;7p;14p;16p' input_file
但是当操作不仅仅是打印时,这会变得更加复杂,而且我不想编写相同的长命令 4 次(是的,我知道我可以通过替换相同的 bash 变量 4 次来构造这个长 sed 命令,但是这还不够理想......),即
sed -n '1{long_command};7{long_command};14{long_command};16{long_command}' input_file
有没有办法对我文件的这些特定行进行操作?我期待类似的东西,
sed -n '1,7,14,16p'
这肯定不会以当前的形式工作。
任何帮助将不胜感激。“不,这不可能。” 有解释也是我会接受的答案。
您可以使用分支:
(请注意,您还可以添加一些
20,25b1
行范围,或/re/b1
包含与 匹配的行re
)。或者你可以使用
awk
:或使用哈希:
(或者
BEGIN{lines[1]lines[7]lines[14]lines[16]}
如果没有太多)只需反转您的选择并将其删除:
第一个变体:
你可以使用这个技巧:
测试
输出
第二种变体:
一开始,辅助
sed
用于从文件中过滤只需要的行,然后这些行sed
通过长命令传送到主。