awk'{print $ 9}'最后一个ls -l列,包括文件名中的任何空格

Min*_*int 16 bash awk

我怎么能得到awk输出$ 9 $ 10 $ 11等等,因为我的一些文件中有空格.

ls -l | awk '{print $9}'
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 33

更好的解决方案:首先不要尝试解析ls输出.

irc.freenode.org #bash频道的官方维基解释了为什么这是一个坏主意,以及您可以采取的替代方法: http://mywiki.wooledge.org/ParsingLs

使用find,stat和类似工具将提供您正在寻找的功能而没有陷阱(并非所有这些都是显而易见的 - 有些仅在迁移到具有不同ls实现的平台时才会发生).

对于您的具体示例,我猜您正在尝试仅查找当前目录中的文件(而不是目录); 您当前使用的实现ls -l是错误的,因为它排除了具有+ t或setuid权限的文件.实现这一目标的正确方法如下:

find . -maxdepth 1 -type f -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)

  • 如果你将输出提供给另一个命令,如`grep -z`或`xargs -0`,请考虑使用\ 0代替\n.这使`-printf`的工作方式与`-print0`相同. (2认同)

小智 5

只是为了完成。也可以使用 sed 完成:

# just an exercise in regex matching ...
ls -l | sed -E  -e '1d; s/^([^ ]+ +){8}//' 
Run Code Online (Sandbox Code Playgroud)