我最初使用命令行创建了一个脚本:
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'