抓取文件的某些内容

抓取文件的某些内容

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

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

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

user1:x:1:4
user2:x:2:5
user3:x:3:6

输出将是:

user1
user2
user3

答案1

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

cut -d: -f1 /etc/passwd

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

答案2

每次你想从表格输入中提取数据时,你应该考虑awk。它几乎在每个 Unix 系统上都可用,所以这是一个好习惯:

awk -F':' '{print $1}' /etc/passwd 
  • -F':': 将“:”定义为列分隔符。
  • '{}':对每一行执行该指令。
  • print $1:将第一列打印到屏幕上。

答案3

这是 Perl 一行代码:

perl -F/:/ -lane 'print $F[0]' /etc/passwd

答案4

在您的示例中,所有 3 个名称的长度相同。在这种情况下 - 这可能会发生,但对于 /etc/passwd 则不太可能 - 您也可以使用 colrm:

echo "user1:x:1:4
> user2:x:2:5
> user3:x:3:6" | colrm 6
user1
user2
user3

或者,当然

cat FILE | colrm 6 

(一种罕见的情况useless use of cat不适用,因为您无法手动传递一个 FILE 作为参数。)

相关内容