我有一个包含文件列表的文本文件.我想把cat他们的内容放在一起.做这个的最好方式是什么?我正在做这样的事情,但它看起来过于复杂:
let count=0
while read -r LINE
do
[[ "$line" =~ ^#.*$ ]] && continue
if [ $count -ne 0 ] ; then
file="$LINE"
while read PLINE
do
echo $PLINE | cat - myfilejs > /tmp/out && mv /tmp/out myfile.js
done < $file
fi
let count++
done < tmp
Run Code Online (Sandbox Code Playgroud)
我正在跳过评论的行并遇到问题.必须有更好的方法来做到这一点,没有两个循环.谢谢!
Ber*_*ard 13
或者在简单的命令中
cat $(grep -v '^#' files) > output
Run Code Online (Sandbox Code Playgroud)
xargs cat < files
xargs 的优势$(cat)在于它可以cat扩展为一个巨大的参数列表,如果由于 Linux 的最大命令行长度而导致列表中有很多文件,这些参数列表可能会失败。
不关心的例子#:
printf 'a\nb\nc\n' > files
printf '12\n3\n' > a
printf '4\n56\n' > b
printf '8\n9\n' > c
xargs cat < files
Run Code Online (Sandbox Code Playgroud)
输出:
12
3
4
56
8
9
Run Code Online (Sandbox Code Playgroud)
#OP要求的更具体的示例忽略:
printf 'a\nb\n#c\n' > files
printf '12\n3\n' > a
printf '4\n56\n' > b
printf '8\n9\n' > c
grep -v '^#' files | xargs cat
Run Code Online (Sandbox Code Playgroud)
输出:
12
3
4
56
Run Code Online (Sandbox Code Playgroud)
相关:如何将 find 命令返回的文件列表通过管道传输到 cat 以查看所有文件
#!/bin/bash
files=()
while read; do
case "$REPLY" in
\#*|'') continue;;
*) files+=( "$REPLY" );;
esac
done < input
cat "${files[@]}"
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是:
cat只执行一次.| 归档时间: |
|
| 查看次数: |
19356 次 |
| 最近记录: |