我有一个sed
oneliner,用于打印文件中的行范围:
sed -n '10,20p' file.txt
上面的代码将打印 file.txt 中的第 10 行到第 20 行。
但我怎样才能打印行号呢?
答案1
尝试awk
:
awk 'FNR==10,FNR==20 {print FNR ":" $0}' file.txt
这将打印行号、冒号,然后打印第 10 到 20 行范围内的行。
或者在第 20 行之后停止阅读:
awk 'FNR >= 10 {print FNR ":" $0}; FNR == 20 {exit}' file.txt
如果处理多个文件并且您的awk
实现支持该nextfile
指令:
awk -v OFS=: 'FNR >= 10 {print FILENAME, FNR, $0}; FNR == 20 {nextfile}' ./*.txt
(这里还打印当前文件名)。
答案2
答案3
仅使用sed
.
sed -n '10,20{=;p}' file.txt | sed '{N; s/\n/ /}'
N;
告诉sed
将下一行添加到模式空间中,因此现在sed
正在处理这两行。s/\n/ /
用空格替换换行符,将两行“合并”在一起。
资料来源:
解释者阿拉·阿里(来源2)
答案4
$ < file grep -ne '^' | sed -ne '10,20p'
$ < file sed -e '10,20!d;=;20q' | paste -d: - -
Not so UUOC:
$ cat -n file | sed -nEe '10,20s/^\s*(\S+)\t/\1:/p'
$ perl -lne 's/^/$.:/;
print if 10..20;
last if 20..20;
' file