grep的输出不是逐行的

时间:2017-11-17 01:09:17

标签: bash shell awk grep

我有这段代码:

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的默认输出应该给我的段落版本就像我想要的那样,但事实并非如此。我做错了什么?

1 个答案:

答案 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的循环。