Gec*_*no1 126 text-processing cat
如果我使用cat -n text.txt自动编号行,那么我如何使用该命令仅显示某些编号的行。
tac*_*omi 236
用 sed
用法
$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Run Code Online (Sandbox Code Playgroud)
打印一行 (5)
$ sed -n 5p file
Line 5
Run Code Online (Sandbox Code Playgroud)
打印多行 (5 & 8)
$ sed -n -e 5p -e 8p file
Line 5
Line 8
Run Code Online (Sandbox Code Playgroud)
打印特定范围 (5 - 8)
$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8
Run Code Online (Sandbox Code Playgroud)
使用其他特定行打印范围 (5 - 8 & 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
Run Code Online (Sandbox Code Playgroud)
phk*_*phk 45
一种方法是使用sed:
cat -n text.txt | sed '11d'
Run Code Online (Sandbox Code Playgroud)
其中 11 是要删除的行号。
或者删除除 11 之外的所有内容:
cat -n text.txt | sed '11!d'
Run Code Online (Sandbox Code Playgroud)
范围也是可能的:
cat -n text.txt | sed '9,12!d'
Run Code Online (Sandbox Code Playgroud)
而且cat -n甚至没有必要:
sed '9,12!d' text.txt
Run Code Online (Sandbox Code Playgroud)
cot*_*eyr 13
根据目标,我喜欢 head 或 grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
将返回第 41 到 50 行。
或者
cat /var/log/syslog -n | grep " 50" -b10 -a10
将显示第 40 行到第 60 行。 grep 方法的问题是你必须使用 account 来填充行号(注意空格)
两者对于解析日志文件都非常方便。
正如其他人向您展示的那样,没有必要使用cat -n. 其他程序会为你做这件事。但是,如果您确实需要解析输出cat -n并仅显示特定行(例如,4-8、12 和 42),您可以执行以下操作:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
4 Line 4
5 Line 5
6 Line 6
7 Line 7
8 Line 8
12 Line 12
42 Line 42
Run Code Online (Sandbox Code Playgroud)
In awk,$1是第一个字段,因此此命令打印第一个字段为 i) 4 到 8(含)或 ii) 12 或 iii) 42 的所有行。
如果您还想删除添加的字段cat -n以从文件中获取原始行,您可以执行以下操作:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
344029 次 |
| 最近记录: |