linux - unix 将文件列表连接到线上

标签 linux bash shell awk ls

在一个目录中,有多个文件,例如:

file1 
file2 
file3

是否有一种简单的方法可以在 bash 中连接这些文件以获取一行(通过“OR”连接),如下所示:

文件1或文件2或文件3

或者我需要为其编写脚本吗?

最佳答案

您可以使用此函数打印所有以 "OR " 作为分隔符的文件名(包括带有空格、换行符或特殊字符的文件名)(假设您的文件名不包含 ASCII 代码 4):

orfiles() {
   local IFS=$'\4'
   local out="$*"
   echo "${out//$'\4'/ OR }"
}

然后将其称为:

orfiles *

工作原理:

  1. 我们在函数内部将 IFS(内部字段分隔符)设置为 ASCII 4
  2. 我们将 "$*" 的输出存储在局部变量 out 中。这将在变量 $out 中的每个文件名后面放置 \4
  3. 最后,使用 BASH 字符串替换,我们在打印 $out 的输出时将 \4 全局替换为 "OR "

在 Unix 系统中 IFS 只是一个单字符分隔符,因此它不能存储多字符串 "OR ",我们必须按照如上所示分 2 个步骤来完成此操作。

关于linux - unix 将文件列表连接到线上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46298684/

相关文章:

ruby-on-rails - RVM 不适用于 Vagrant

c++ - qt5:为什么有2个进程和内存使用?

linux - 如何在 BASH 中对文件行进行排序

android - 运行 ADB 命令的 Bash 脚本不会遍历设备列表

linux - shell 脚本等待gunzip 完成然后再进入下一行

java - 如何将SSL证书集成到/jre/security文件夹中的cacerts文件中?

bash - 如何创建多行 curl 字符串,变量包含在单引号和双引号中?

linux - grep 和 AWK 命令读取主机名并打印列

Linux shell bash 脚本 if 条件

linux - 如何将嵌套命令传递给 ssh 在命令行中运行?