从文件中搜索和选择字符串

时间:2017-03-24 19:51:33

标签: linux shell terminal grep debian

我在用字符串分隔几个确切的'字段'然后将它们放入.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文件中。 我怎样才能做到这一点?

3 个答案:

答案 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

输出:

output

谢谢,祝你有个美好的一天

答案 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