1

我想在 shell 脚本中为 ex 运行一个命令,ls -al我需要提取第 5 行的第 3 个单词。任何人都可以帮忙吗?

我目前拥有的是:

str = $(ls -al foo | cut -d" " -f3) 

这是将所有单词存储在第三个字段中,但我无法从第 5 行获取单词。

谁能告诉我如何获得特定的线路,或更优化的解决方案。

4

2 回答 2

3

试试str=$(ls -al foo | awk 'NR==5{print $3;exit}')ls命令输出不适合解析。还将cut连续空格计为单独的字段,因此识别单词cut总是有风险的

实验:-

[[bash_prompt$]]$ ls -al foo
total 12
drwxr-xr-x  2 abasu synopsys 4096 2013-05-09 15:11 .
drwxr-xr-x  9 abasu synopsys 4096 2013-05-09 15:11 ..
-rw-r--r--  1 abasu synopsys    0 2013-05-09 15:08 a
-rw-r--r--  1 abasu synopsys    0 2013-05-09 15:08 b
-rw-r--r--  1 abasu synopsys 1362 2013-05-09 15:11 c
-rw-r--r--  1 abasu synopsys    0 2013-05-09 15:08 d
-rw-r--r--  1 abasu synopsys    0 2013-05-09 15:08 e
-rw-r--r--  1 abasu synopsys    0 2013-05-09 15:08 f
[[bash_prompt$]]$ ls -al foo | awk 'NR==5{print $3;exit}'
abasu
[[bash_prompt$]]$ ls -al foo | awk 'NR==6{print $5;exit}'
1362
[[bash_prompt$]]$ str=$(ls -al foo | awk 'NR==6{print $5;exit}')  #for 6th line,5th word
[[bash_prompt$]]$ echo $str
1362
于 2013-05-09T09:09:31.487 回答
2

只需将您的命令更改为:

ls -al |head -5|tail -1|cut -d" " -f3
于 2013-05-09T09:23:00.380 回答