gpt4 book ai didi

linux - 在 If 语句中使用 grep 获取所有项目,忽略空格

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:28 25 4
gpt4 key购买 nike

这是 bash 入门课家庭作业的一部分。我需要引入 passwd 文件,这是我用 passfile 变量完成的,然后我需要能够提取它的某些部分并显示不同的字段。当我使用下面的语句从 CLI 手动 grep 时,它工作正常。我想要所有的变量,我都得到了。

grep 1000 passfile | cut -c1-

但是,当我从脚本执行此操作时,它会在用户全名的第一个“空格”处停止或中断或重新开始。当我只想要一行时,John D. Doe 将返回 3 行。我通过回显 i 和以下值来看到这一点。

for i in `grep 1000 ${passfile} | cut -c1-

user=`echo $1 | cut -d : -f1`
userID=`echo $1 | cut -d : -f3`

例如,如果该行显示为

jdoe:x:123:1000:John D Doe:/home/jdoe:/bin/bash

我得到以下信息:

i = jdoe:x:123:1000:John

这给了我:用户为jdoe,UID为509

但在下一行中,我从 R 开始。
i = R. 所以 User 是 R., UID 是 R.

下一行

i = Johnson:/home/jjohnson:/bin/bash

返回用户是 Johnson,UID 是/bin/bash

passwd 文件包含许多用户,因此我需要使用 for 循环来处理所有用户。我想如果我能让它忽略我能得到的空间。但是对 linux 了解不多,我不确定我是否走在正确的道路上。在此先感谢您的指导/帮助。

最佳答案

默认情况下,cut 按空格而不是冒号拆分。如果您继续使用它,请指定分隔符。

您可能想在 while 循环中使用 IFS=:read 语句来获取以下值:

while IFS=: read user password uid gid comment home shell
do
...whatever...
done < /etc/passwd

或者您可以将 grep 的输出通过管道传输到 while 循环中。

关于linux - 在 If 语句中使用 grep 获取所有项目,忽略空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5189661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com