Bash: 如何从文件中读取并在一行中显示输出?

Bash: How can I read from file and display the output in one line?

我想 运行:

grep nfs /etc/fstab | awk '{print }'

[root@nyproxy5 ~]# grep nfs /etc/fstab | awk '{print }'
/proxy_logs
/proxy_dump
/sync_logs
[root@nyproxy5 ~]#

并在一行中获得由 space 分隔的输出。

我该怎么做?

如果你不介意最后有一个 space(并且没有换行符),你可以使用这个 awk 脚本:

awk '/nfs/{printf "%s ", }' /etc/fstab

对于匹配模式 /nfs/ 的行,打印第二列后跟 space。作为一般规则,管道 grep 到 awk 是不必要的,因为 awk 可以自己进行模式匹配。

如果您想在末尾换行,可以使用 END 块:

awk '/nfs/{printf "%s ", }END{print ""}' /etc/fstab

这将打印一个空字符串,后跟输出记录分隔符(换行符)。这意味着即使没有找到匹配的记录,输出中也总是有一个换行符。如果这是一个问题,您可以使用一个标志:

awk '/nfs/{f=1;printf "%s ", }END{if(f)print ""}' /etc/fstab

如果模式匹配,标志 f 将设置为真,导致打印换行符。

换行符或任何其他字符可以删除或替换为 tr 命令:

grep nfs /etc/fstab | awk '{print }' | tr -c '\n' ' '

如果您还想摆脱制表符:

 | tr -c '\t' ' '