在目录中,有几个文件,例如:
file1
file2
file3
是否有一种简单的方法可以连接这些文件,以便在bash中获取一行(通过“OR”连接),如下所示:
file1 OR file2 OR file3
或者我需要为它编写脚本吗?
答案 0 :(得分:2)
您可以使用此功能打印所有文件名(包括带有空格,换行符或特殊字符的文件名)" OR "
作为分隔符(假设您的文件名不包含ASCII代码4
< / em>的):
orfiles() {
local IFS=$'\4'
local out="$*"
echo "${out//$'\4'/ OR }"
}
然后将其称为:
orfiles *
工作原理:
IFS
(内部字段分隔符)设置为ASCII 4
"$*"
的输出存储在局部变量out
中。这会在变量\4
中的每个文件名后面放置$out
。\4
打印输出时全局替换" OR "
{/ 1}}。在Unix系统中$out
只是一个字符分隔符,因此它不能存储多字符串IFS
,我们必须分两步完成,如上所示。
答案 1 :(得分:1)
您只需使用
即可printf '%s OR ' $(ls -1 *) | sed 's/OR $/''/'; echo -e '\n'
ls -1 *
是目录。
答案 2 :(得分:1)
应该考虑的时刻是文件名可以包含空格。
使用以下 ls + awk 解决方案:
ls -1 * | awk '{ r=(r)? r" OR "$0 : $0 }END{ print r }'
使用换行符的文件名的解决方法:
echo -e $(ls -1b hello* | awk -v RS= '{gsub(/\n/," OR ",$0); gsub(/\\ /," ",$0); print $0}')
-b
- ls 选项为非图形字符打印C样式转义答案 3 :(得分:0)
ls -1|awk -v q='"' '{printf "%s%s", NR==1?"":" OR ", q $0 q}END{print ""}'
ls&amp; awk方法,例如文件名包含空格:
kent$ ls -1
file1
file2
'file with OR and space'
kent$ ls -1|awk -v q='"' '{printf "%s%s", NR==1?"":" OR ", q $0 q}END{print ""}'
"file1" OR "file2" OR "file with OR and space"
答案 4 :(得分:0)
p3 <- p2 + stat_function(fun = dnorm) +
stat_function(fun = dnorm, geom = "area", fill = "blue", alpha = 0.3,
xlim = c(ztest,zcrit)) +
geom_text(x = 1.13, y = 0.1, size = 5, fontface = "bold",
label = paste0(valor_area_z * 100, "%")) +
stat_function(fun = dnorm, geom = "area", fill = "red", alpha = 0.5,
xlim = c(zcrit,xvalues$x[2])) +
geom_text(x = 2.27, y = 0.015, size = 3, fontface = "bold",
label = paste0(valor_area_zc * 100, "%")) +
scale_x_continuous(breaks = c(-3:3)) +
labs(x = "\n z", y = "f(z) \n", title = "Distribuição Normal \n") +
theme_fivethirtyeight()
p3