我正在尝试使用sed和regexp获取子字符串。我想获取以“:”分隔的第一个和第二个“字段”。
要获取第一个字段,我使用了以下命令,但不知道如何获取第二个字段。
用于获取第一个字段的命令:
sed -r -n '1,2 s/([^:]+).*/\1/p' /etc/passwd
输入文件(示例):
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
命令结果:
root
daemon
但是我尝试获取第一个(“ root”)和第二个(“ x”)字段(仅基于文件第一行的示例),但是我没有成功。
我尝试过:
sed -r -n '1,2 s/([^:]+).*([^:]+).*/\1 \2/p' /etc/passwd
命令结果:
root h
daemon n
所需结果:
root x
daemon x
答案 0 :(得分:1)
sed
使用greedy match。在
sed -r -n '1,2 s/([^:]+).*([^:]+).*/\1 \2/p' /etc/passwd
^^
.*
匹配尽可能多的字符。您需要
sed -r -n '1,2 s/([^:]+):([^:]+).*/\1 \2/p' /etc/passwd
^
顺便说一句,更简单的方法是使用cut
:
cut -d ":" -f 1,2 --output-delimiter=' ' /etc/passwd
答案 1 :(得分:0)