例如:
在 sed 中打印两行之间的所有内容是:
sed -n '30,40p' filename
但是,当我将它用作:
sed -n '30,40p' *
它只打印第一个文件的第 30 到 40 行。
一堆文件怎么办?
最佳答案
Per POSIX , sed
不会重置输入文件中的行号。
(如果您有 GNU sed
,您可以使用 -s
选项 - 见底部)。
虽然您可以使用shell 循环 来解决这个问题(for f in *; sed ...; done
),但它是使用单个 awk
命令效率更高,其中内置变量 FNR
反射(reflect)输入文件相对行号(从 1 开始):
awk 'FNR >= 30 && FNR <= 40' *
此解决方案符合 POSIX 标准。
如果您有 GNU sed
,请使用 -s
选项为每个输入文件重新开始行编号:
sed -s -n '30,40p' *
关于bash - 在多个文件中按行号打印一系列行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690131/