繁体   English   中英

bash脚本中Grep命令的问题

[英]Problems with Grep Command in bash script

我在bash脚本中使用grep时遇到了一些非常不寻常的问题。 以下是我正在使用的显示行为的bash脚本代码的示例:

UNIQ_SCAN_INIT_POINT=1
cat "$FILE_BASENAME_LIST" | uniq -d >> $UNIQ_LIST
sed '/^$/d' $UNIQ_LIST >> $UNIQ_LIST_FINAL
UNIQ_LINE_COUNT=`wc -l $UNIQ_LIST_FINAL | cut -d \  -f 1`
while [ -n "`cat $UNIQ_LIST_FINAL | sed "$UNIQ_SCAN_INIT_POINT"'q;d'`" ]; do
    CURRENT_LINE=`cat $UNIQ_LIST_FINAL | sed "$UNIQ_SCAN_INIT_POINT"'q;d'`
    CURRENT_DUPECHK_FILE=$FILE_DUPEMATCH-$CURRENT_LINE 
    grep $CURRENT_LINE $FILE_LOCTN_LIST >> $CURRENT_DUPECHK_FILE
    MATCH=`grep -c $CURRENT_LINE $FILE_BASENAME_LIST`
    CMD_ECHO="$CURRENT_LINE matched $MATCH times," cmd_line_echo
    echo "$CURRENT_DUPECHK_FILE" >> $FILE_DUPEMATCH_FILELIST
    let UNIQ_SCAN_INIT_POINT=UNIQ_SCAN_INIT_POINT+1
done

在很多情况下,对文件位置列表中的当前行进行grepping时,即使文件位置列表中的当前行确实存在匹配项,它也没有将输出输出到当前dupechk文件(我在终端中使用没有问题)。

我在互联网上四处逛逛,看看是否有人有类似的行为,到目前为止,我发现这与在Bash脚本中grep命令之前运行的其他命令的缓冲和非缓冲输出有关。 ..

但是似乎没有人找到解决方案,所以基本上我是问你们是否遇到过这个问题,以及解决这个问题的任何想法/技巧/解决方案...

问候

保罗

问题是标准的I / O库。 当它写到一个终端时,它是没有缓冲的,但是如果它写到一个管道,那么它将设置缓冲。

尝试改变

CURRENT_LINE=`cat $UNIQ_LIST_FINAL | sed "$UNIQ_SCAN_INIT_POINT"'q;d'`

CURRENT LINE=`sed "$UNIQ_SCAN_INIT_POINT"'q;d' $UNIQ_LIST_FINAL`

$FILE_LOCTN_LIST是否存在名称中带有空格的目录? 因为如果是这样,这些空间将需要以某种方式进行转义。 findxargs某种组合通常可以为您解决,特别是xargs -0

一个使用md5sum和sort的小型bash脚本,用于检测当前目录中的重复文件:

CURRENT="" md5sum * | 
  sort | 
  while read md5sum filename; 
  do 
    [[ $CURRENT == $md5sum ]] && echo $filename is duplicate; 
    CURRENT=$md5sum; 
  done

您标记了linux,有些我假设您拥有GNU find,md5sum,uniq,sort等工具。这是一个查找重复文件的简单示例

$ echo "hello world">file
$ md5sum file
6f5902ac237024bdd0c176cb93063dc4  file
$ cp file file1
$ md5sum file1
6f5902ac237024bdd0c176cb93063dc4  file1
$ echo "blah" > file2
$ md5sum file2
0d599f0ec05c3bda8c3b8a68c32a1b47  file2
$ find . -type f -exec md5sum "{}" \; |sort -n | uniq -w32 -D
6f5902ac237024bdd0c176cb93063dc4  ./file
6f5902ac237024bdd0c176cb93063dc4  ./file1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM