我在用字符串分隔几个确切的'字段'然后将它们放入.txt文件时遇到了麻烦。我需要从/ etc / passwd文件中提取'nologin'用户,这是一个简单的步骤。我正在使用这个命令:
grep -n 'nologin' /etc/passwd > file1.txt
cat命令给我举个例子:
2:daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3:bin:x:2:2:bin:/bin:/usr/sbin/nologin
4:sys:x:3:3:sys:/dev:/usr/sbin/nologin
并将其保存到file1.txt
现在我必须从file1.txt中提取一个数字(2,3,4),登录(守护进程,bin,sys)UID和shell。看起来应该是这样的
2:daemon:1:/usr/sbin/nologin
3:bin:2:/usr/sbin/nologin
4:sys:3:/usr/sbin/nologin
我还必须将该输出保存到* .txt文件中。 我怎样才能做到这一点?
答案 0 :(得分:0)
您可以使用cut命令,如下所示:
cut -d':' -f1 file1.txt > file2.txt
根据man page:
-d, - delimiter = DELIM
使用DELIM代替TAB进行字段分隔符
-f, - fields = LIST
仅选择这些字段;除非指定了-s选项,否则还会打印任何不包含分隔符的行
答案 1 :(得分:0)
我认为您可以使用awk来获取您的特定字段 1-转到终端,确保知道文件路径 2-使用awk命令,其中-F用于表示分隔符,$ use用于表示字段编号
你的file1.txt包含:
2:守护程序:X:1:1:守护程序:/ usr / sbin目录:/ usr / sbin目录/ nologin的 3:箱:X:2:2:仓:/ bin中:/ usr / sbin目录/ nologin的 4:sys:x:3:3:sys:/ dev:/ usr / sbin / nologin
使用文件1
在终端中使用awk命令awk -F '[:/]' '{print $1 " " $2 " " $4 " " " " $(NF-2) " " $(NF-1) " " $NF}' file1.txt
确保您的文件路径正确
$1 or $2 = the number of field or column
$ NF =最后一栏 $(NF-1)=最后一列之前的列 等等 " " =平均空间
您的输出将是:
2守护进程1 usr sbin nologin 3 bin 2 usr sbin nologin 4 sys 3 usr sbin nologin
您可以在awk命令中添加分隔符,而不是空格
例如,
awk -F '[:/]' '{print $1 ":" $2 ":" $4 ":/" $(NF-2) "/" $(NF-1) "/" $NF}' file1.txt
输出:
谢谢,祝你有个美好的一天
答案 2 :(得分:0)
awk -F: '{print $1,$2,$4,$NF}' OFS=: file1.txt > newfile.txt
2:daemon:1:/usr/sbin/nologin
3:bin:2:/usr/sbin/nologin
4:sys:3:/usr/sbin/nologin