在bash中组合Grep和Paste命令

时间:2019-05-03 16:18:52

标签: bash grep paste

非常抱歉问一个愚蠢的问题,但是我对此事感到疯狂。

所以,我在bash中,并且有一些文件:

FM

我要做的就是创建一个变量,将所有三个变量用逗号分隔,这是我搜索的输出:

const check = () => {
    if (!context) {
        throw new Error("No context");
    }
};

export function getEnvironment() {  
    try {
        check();
        return context.getEnvInfo().environment;
    } catch (e) {
    }
}

我现在正在使用的内容(但是有空格而不是逗号):

ls
a.bed
b.bed
c.bed

a.bed, b.bed, c.bed

非常感谢您

4 个答案:

答案 0 :(得分:7)

我将使用printf及其-v选项,然后使用参数扩展。

$ printf -v beds '%s, ' *.bed
$ beds=${beds%, }

第一行产生a.bed, b.bed, c.bed, 。第二行修剪尾随,

如果只需要单字符分隔符,则可以选择使用带有IFS的数组:

$ beds=$(a=(*.bed); IFS=,; echo "${a[*]}")

答案 1 :(得分:6)

您可以单独使用ls的'x'和'm'选项:

beds=$(ls -xm *.bed)
  

echo $ beds
  a.bed,b.bed,c.bed

答案 2 :(得分:0)

这里有些古怪:

beds=$( tr \  , <<< $(ls *.bed))

在上面的示例中,仅通过用ls执行即可消除$()输出中的换行符。然后,我们将结果字符串用作tr的输入,它用逗号替换所有空格。

我最喜欢的是在ls中使用内置的-xm参数,但是这个特定答案可以应用于其他不提供ls丰富输出格式的可执行文件。

答案 3 :(得分:0)

针对此特定情况的过大杀伤力,但就像您仅供参考:

$ bedsArr=( *.bed )
$ bedsStr=$( printf '%s, ' "${bedsArr[@]:0:$((${#bedsArr[@]} - 1))}"; printf "%s\n" "${bedsArr[@]: -1:1}" )
$ printf '%s\n' "$bedsStr"
a.bed, b.bed, c.bed