我需要从文本文件中提取文件名,而文本文件中的输出没有字体。
因此,从下面的输出文件中可以看到,我需要在第一次结果后打印出没有字体的结果?因此,只有最后一个结果在此输出中有字体
这是否有意义 - 将Grep,Sed或Awk作为答案
因此需要下面的文本文件中的输出显示** START和** END中的该PDf中不存在任何字体
******************START***********************
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
/home/user1/Documents/temp1.pdf
******************END***********************
******************START***********************
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
/home/user1/Documents/temp2.pdf
******************END***********************
******************START***********************
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
BAAAAA+TimesNewRomanPS-BoldMT TrueType yes yes yes 14 0
CAAAAA+TimesNewRomanPSMT TrueType yes yes yes 9 0
/home/user3/Documents/temp file.pdf
******************END***********************
答案 0 :(得分:1)
如果前一行以-
开头,则打印包含“.pdf”的任何行。
[me@home]$ awk '{if (st && match($0,".pdf")){print $0}; st=match($0,"^-")}' in.txt
/home/user1/Documents/temp1.pdf
/home/user1/Documents/temp2.pdf
它不是通用解决方案,但可以使用您提供的输入数据。我可以想象一些可能会失败的边缘情况,但这完全取决于输入文件的规范。
(基于您在下面的评论中发布的脚本)如果您要做的只是识别没有嵌入字体的PDF文件,这可能会有效:
MAGNUM="/mnt/network/User\ 1\ PDF\ 06.12.11/"
has_no_fonts() {
COUNT=$(pdffonts "$1" 2> /dev/null | wc -l)
exit $(( $COUNT - 4 ))
}
export -f has_no_fonts
find "$MAGNUM" -type f -name "*.pdf" -exec bash -c 'has_no_fonts "{}"' \; -print
以下是剧本的细分:
检测嵌入字体数。如果没有嵌入字体,pdffonts
返回特定值,那会很简单,但事实并非如此。因此,我们计算输出行数并扣除2(标题行)以确定嵌入字体的数量
COUNT=$(pdffonts "$1" 2> /dev/null | wc -l) # number of output lines
# exactly 2 if no fonts
# exactly 0 if there are errors
exit $(( $COUNT - 2 )) # exit 0 (success) if and only if PDF has no fonts
导出bash函数,因此可以在子shell中使用。
export -f has_no_fonts
找到pdf文件,只有在PDF有效且没有字体
的情况下才打印出名称find ..... -exec bash -c 'has_no_fonts "{}"' \; -print
------- -------
| |
-exec cannot run bash functions Will only print
so run in a bash subshell filename if prev command exit with 0
如果您更喜欢单行,则整个脚本可以写成:
find "$MAGNUM" -name "*.pdf" \
-exec bash -c 'exit $(($(pdffonts "{}" 2> /dev/null |wc -l) - 2))' \; -print
答案 1 :(得分:1)
这可能对您有用:
sed -n '/^\*/,//{H;/\*END\*/{x;s/\n/&/6;t;s|[^/]*\([^\n]*\).*|\1|p}}' in.txt
/home/user1/Documents/temp1.pdf
/home/user1/Documents/temp2.pdf
说明:
*
或者在紧要关头:
sed -n '/^\*/,//{H;/\*END\*/{x;s|[^/]*-\n\(/[^\n]*\).*|\1|p}}' in.txt