这是我的ls
命令和后处理:
ls -l $pwd | tail -n +2 | cut -c1-10,50-999999 | sed 's/./& /g' |
sed 's/\(.\{7\}\)/& /g' | sed 's/\(.\{30\}\)/&/g'
这是输出:
- r w x r - - r - - a d d . o l d
我想删除文件名中的所有空格,所以我最终会得到这样的结果:(请记住,空格模式保留在权限中)
- r w x r - - r - - add.old
答案 0 :(得分:3)
你根本就没有。这里有一整篇文章,详细说明了为什么你不应该解析ls
输出,而是使用像shell这样的工具组合(很可能非常全面)文件名为globbing,find
和stat。 / p>
例如:
for name in * ;do echo $(stat -c '%A' "$name"):$name ; done
编辑: stat
为您提供了许多格式来帮助您实现所需的输出,现在这可以为您提供明确的输出(但是,这可能会出现问题,例如文件名中的换行符),您可以单独使用sed
输出上的stat
。请参阅man stat
。
答案 1 :(得分:0)
如果文件名不合理,编写防弹代码来解析ls
输出是很棘手的。需要注意的是,您的文件名不能包含换行符,并且应该避免使用其他控制字符(但或多或少其他任何东西都应该没问题),您可以冒险解析ls
的输出。如果您的文件名仅限于便携式文件名字符集([-a-zA-Z0-9_.]
),那么您应该没问题。但请注意,并非所有人都会像使用文件名那样严格,因此如果有人创建了包含意外字符的名称,您的脚本可能会突然失败。请注意,文件名中的前导破折号可能会造成严重破坏;例如--version
之类的名称会使平均GNU实用程序出现意外行为。
您可以使用cut -c1-10,50-
来避免输入所有这些内容。您可以在每个表达式前面使用sed
将3 -e
个命令合并为一个命令。
通过一点点sed
技巧,您可以更轻松地处理间距。在我的Mac上,文件名开头的正确列是第54列,而不是50:
$ ls -l |
> sed -e '1d;12q' | # Only 11 file names listed
> cut -c 1-10,54- |
> sed -e 's/\(.\)\(...\)\(...\)\(...\)/\1\2 \3 \4 @@/' \
> -e h -e 's/@@.*/@@/' -e 's/[^@]/& /g' -e G -e 's/\n//' \
> -e 's/@@[^@]*@@//'
- r w - r - - r - - 2da.c
- r w - r - - r - - 3dalloc1.c
- r w - r - - r - - 3dalloc2.c
- r w - r - - r - - 3dalloc3.c
- r w - r - - r - - 3dalloc4.c
- r w - r - - r - - 4 @@ Testing
- r w - r - - r - - @@ Testing
d r w x r - x r - x Floppy
d r w x r - x r - x IQ
d r w x r - x r - x Primes
d r w x r - x r - x SHA-256
$
sed
命令有什么作用?
@@
。@@
替换@@
及其后的所有内容。@
字符后面加上一个空格。@@
标记,并且它之间的所有内容都不是@
。这会使文件名中的@@
标记保持不变 - 见证其中包含@@
空格的两个名称。
对于记录,传递给cut
然后sed
的11行是:
-rw-r--r-- 1 jleffler staff 2362 Mar 6 19:48 2da.c
-rw-r--r-- 1 jleffler staff 1638 Mar 6 19:48 3dalloc1.c
-rw-r--r-- 1 jleffler staff 2870 Mar 6 19:48 3dalloc2.c
-rw-r--r-- 1 jleffler staff 2968 Mar 6 19:48 3dalloc3.c
-rw-r--r-- 1 jleffler staff 2096 Mar 6 19:48 3dalloc4.c
-rw-r--r-- 1 jleffler staff 0 Mar 21 16:46 4 @@ Testing
-rw-r--r-- 1 jleffler staff 0 Mar 21 16:47 @@ Testing
drwxr-xr-x 4 jleffler staff 136 Mar 9 23:03 Floppy
drwxr-xr-x 8 jleffler staff 272 Mar 6 19:48 IQ
drwxr-xr-x 33 jleffler staff 1122 Mar 6 19:48 Primes
drwxr-xr-x 13 jleffler staff 442 Mar 6 19:48 SHA-256