我有这段代码:
list=$(ls -l | awk '{print$3,$6,$7,$8,$9}' | grep -v root)
echo $list
,输出是所有过滤后的字符串的联合版本,如下所示:
> avahi Nov 16 21:50 1170 syslog Nov 16 21:50 1171 messagebus ...
和我想要的一样:
> avahi Nov 16 21:50 1170
> syslog Nov 16 21:50 1171
> messagebus Nov 16 21:50 1179
> ...
我还读过grep的默认输出应该给我的段落版本就像我想要的那样,但事实并非如此。我做错了什么?
答案 0 :(得分:5)
假设:
$ txt="line 1
> line 2
> line 3
> line 4"
(即txt
设置为line 1\nline 2\nline 3\nline 4
)
考虑:
$ echo $txt
line 1 line 2 line 3 line 4
VS
$ echo "$txt"
line 1
line 2
line 3
line 4
使用引号或Bash将解释并拆分空格(如行尾的\n
。)
另外,通常not a good idea尝试解析ls
的输出,因为文件名中可以包含空格。文件名中的空格将破坏管道的其余部分(正如您所写的那样。)
使用带有glob的循环。