cut 不输出任何内容

cut 不输出任何内容

我最初使用命令行创建了一个脚本:

grep -c "Author" reviews_folder/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'

它起作用了,但是我需要将它变成一个 shell 脚本,允许用户输入目录供其搜索,因此我将其更改为:

grep -c "Author" $1/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'

完成后,脚本不但没有运行,反而只是打印了许多空白行。

答案1

我猜你正在像下面这样运行脚本:script.sh dir/或者bash script.sh dir/

您传递目录的方式导致了问题。

在您的脚本中您得到一个grep命令:

grep -c "Author" $1/*

如果您传递带有尾部斜杠的目录,则命令grep将按如下方式运行:

grep -c "Author" dir//*

例子:

grep -c "Author" dir//somefile.dat dir//someother-file.dat

其结果类似于:

dir//somefile.dat:5

并且您的cut命令只会返回一个空字符串并将其传递给sort

dir//somefile.dat:5   # < You are asking for second part which is empty

因此,要么像这样运行脚本:script.sh dir要么将其更改为如下内容:

#!/bin/bash

DIR=${1%/}
grep -c "Author" ${DIR}/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'

相关内容