Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用bash脚本将grep中的两行打印成一行_Bash_Grep_Echo_Mediainfo - Fatal编程技术网

如何使用bash脚本将grep中的两行打印成一行

如何使用bash脚本将grep中的两行打印成一行,bash,grep,echo,mediainfo,Bash,Grep,Echo,Mediainfo,我正在努力实现以下目标: 我有一个包含多个视频文件的目录,我想列出所有文件,并在同一行中使用mediainfo添加文件的持续时间和大小(没有其他可用内容) Mediainfo的输出类似于: General Format : File Size : 335 MiB Duration : 28mn 24s 我想在文件中获取以下数据: 文件名:335 MiB:28mn 24s 所以我可以检查是否有重复的文件 因此,我有以下脚本: #!/bin/bash for

我正在努力实现以下目标:

我有一个包含多个视频文件的目录,我想列出所有文件,并在同一行中使用mediainfo添加文件的持续时间和大小(没有其他可用内容)

Mediainfo的输出类似于:

General
Format      : 
File Size   : 335 MiB
Duration    : 28mn 24s
我想在文件中获取以下数据:
文件名:335 MiB:28mn 24s
所以我可以检查是否有重复的文件

因此,我有以下脚本:

#!/bin/bash
         for i in $( ls /mnt/storage/kids/* ); do
                     echo -n item: $i ":"
                     mediainfo $i |grep -A 1 "File size"
                     done
使用echo n时,我在与item相同的行中得到以下行:$I,使用grep-A 1时,我得到文件大小和持续时间,但持续时间进入第二行,与文件名和文件大小相同。
我还想去掉文件名和持续时间头


有什么想法吗?

要摆脱双线,请将代码更改为:

echo -n item: $i ":" $(mediainfo $i |grep -A 1 "File size")
要删除标题,可以使用awk:

$ echo -e 'Filename : BOO\nSize : BAA' | awk -F: '{print $2}'
 BOO
 BAA
  • 不要对$(ls)中的i使用
    ,这是错误的。如果要循环文件,请直接在/mnt/storage/kids/*中为i使用
  • 避免使用echo-n,而使用便携式的printf
试试这个:

for i in /mnt/storage/kids/* ; do
    printf 'item: %s: ' "$i"
    mediainfo "$i" | sed -e '/File Size/,/Duration/{s/.*: //p;};d' | sed -e '$!N;s/\n/: /'
done

不要对$(ls)中的i执行
。直接使用glob:
对于i in/mnt/storage/kids/*
是否仍然需要
-n
?我想不是。当OP在打印后不想换行时,
-n
就出现了“:”