grep命令的输出不是逐行的。
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的默认输出应该给我想要的段落版本,但事实并非如此。我做错了什么?
在上述代码中,我们定义了一个变量txt,并将其设置为包含四行文本的字符串。然后我们尝试使用echo命令打印出这个变量的值。
在第一个例子中,我们没有使用引号将$txt变量括起来,结果输出为"line 1 line 2 line 3 line 4"。这是因为Bash会解释并分割空格(例如行末的\n)。
而在第二个例子中,我们使用了引号将$txt变量括起来,结果输出为四行文本。这是因为使用引号可以保留字符串中的空白字符,如每行末尾的\n。
此外,通常不建议尝试解析ls命令的输出,因为文件名可能包含空格。文件名中的空格会破坏管道的其余部分。相反,可以使用一个带有通配符的循环来处理文件名。
为了避免输出不按行输出的问题和解析ls命令输出的问题,我们应该使用引号来保留空白字符,并使用循环和通配符来处理文件名。