抓取文件的某些内容

mou*_*che 9 sed awk cut files

所以我知道存在解决这个问题的工具,因为我听说过它们,但我不知道它们是什么。

我想做一些像过滤掉 /etc/passwd 中的用户名以外的所有数据的操作。

例如,我想从以下文件中获取 user1、user2 和 user3。在这种情况下,逻辑可能是“将文本抓取到文件每一行的第一个 ':'”。

user1:x:1:4
user2:x:2:5
user3:x:3:6
Run Code Online (Sandbox Code Playgroud)

输出将是:

user1
user2
user3
Run Code Online (Sandbox Code Playgroud)

Mic*_*zek 19

cut正是为了这个目的而存在的。该-d标志指定分隔符,并-f指定要输出的字段:

cut -d: -f1 /etc/passwd
Run Code Online (Sandbox Code Playgroud)

to 的参数-f可以是1,3显示第一个和第三个字段,或者1-3显示前三个;还有-b-c标志可以读取字节和字符而不是字段。如果您需要更灵活的东西,通常awk可以解决问题(请参阅马修的回答


小智 13

每次要从表格输入中提取数据时,都应该考虑awk。它几乎在每个 Unix 系统上都可用,因此养成一个好习惯:

awk -F':' '{print $1}' /etc/passwd 
Run Code Online (Sandbox Code Playgroud)
  • -F':': 将“:”定义为列分隔符。
  • '{}': 对每一行执行这条指令。
  • print $1:将第一列打印到屏幕上。

  • 随机注释:`awk` 需要一个文件名,所以你可以跳过管道,只执行 `awk -F: '{print $1}' /etc/passwd` (3认同)