Linux 将第一个单词作为ls-l的结果
我需要使用Linux 将第一个单词作为ls-l的结果,linux,bash,ls,Linux,Bash,Ls,我需要使用ls-l,并且我希望得到文件名的第一个字,例如,这样的结果 -rw-r--r-- 1 root root 9 Sep 21 23:11 best file 1.txt 我只想 best 因为我需要把这个值放到一个变量中。如果有其他方法代替使用ls-l,也可以 …很抱歉再次打扰您…如果该文件位于子目录下,如何隐藏该文件夹而不显示结果?谢谢 set -- $(ls -l) echo ${11} # Assumes the file is th
ls-l
,并且我希望得到文件名的第一个字,例如,这样的结果
-rw-r--r-- 1 root root 9 Sep 21 23:11 best file 1.txt
我只想
best
因为我需要把这个值放到一个变量中。如果有其他方法代替使用ls-l
,也可以
…很抱歉再次打扰您…如果该文件位于子目录下,如何隐藏该文件夹而不显示结果?谢谢
set -- $(ls -l)
echo ${11} # Assumes the file is the FIRST one listed.
我们应该做到这一点。但我不确定这是否真的是你想要的。首先,
ls-l
还打印一个额外的标题行。你为什么说你需要使用ls-l?如果您能说明实际问题,也许我们可以一起找到更好的解决方案……您不需要使用ls-l
(l)
相反,使用仅输出文件名的ls-1
(第一个),然后使用cut
过滤掉第一列:
ls -1 | cut -d' ' -f1
^
number one, not letter L
要将值存储到变量中,请执行以下操作:
var=$(ls -1 | cut -d' ' -f1)
注意:解析ls
:列的数量可能会有所不同,等等。您可以在中阅读有关该主题的更多信息
更新
注:甚至不需要使用-1
(一),仅使用ls
即可:
ls | cut -d' ' -f1
如下所示,“因为它们是跨管道分离的EOL(线端)。
awk
可以为您选择第一个单词
ls | awk '{print $1}'
尝试:
第4行将有第一行文件$9表示第9列将有所需的字。如果只有一行要输出,这将正常工作:
var=`ls -l | awk '{ print $9 }'`
echo ${var}
或者,您需要使用
grep
来筛选正确文件的输出。不要解析ls@avinash:某些理由可能有用;)@OliverCharlesworth在我的回答中看到了链接。非常感谢各位,所有的解决方案都很好地工作,并感谢提示不要认为-1
实际上在这里做了任何事情,因为它们在管道中是分离的。@BroSlow非常正确。更新了,非常感谢你们的解释。伙计们,我混合了你们所有的解决方案,最终解决了这个问题…非常感谢你们所有人的努力和善意的支持!NR==4
在这里有什么用?您只需要第一个文件的名称。前3行包含。或因此,第4行有第一个文件的详细信息。第9列有它的名字。如果单独解析ls是不好的,那么考虑到.,..等来解析ls就更危险了。我建议你读一读,我同意你的观点,但是OP想要ls-l。我认为OP应该采纳你的建议,使用你前面提到的ls-1(一)。
var=`ls -l | awk '{ print $9 }'`
echo ${var}