如何使用bash脚本将grep中的两行打印成一行
我正在努力实现以下目标: 我有一个包含多个视频文件的目录,我想列出所有文件,并在同一行中使用mediainfo添加文件的持续时间和大小(没有其他可用内容) Mediainfo的输出类似于:如何使用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
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
就出现了“:”