我无法让脚本完成我想要的操作。
我有一个脚本,可以在文件中搜索模式并打印该模式的行号和实例。
我想知道如何在打印找到的行之前先打印文件名
我也想知道如何编写一个新脚本来调用它并将两个参数传递给它。
第一个参数是grep的模式,第二个参数是位置。
如果该位置是目录,它将使用该脚本循环并搜索目录中所有文件的模式。
#!/bin/bash
if [[ $# -ne 2 ]]
then
echo "error: must provide 2 arguments."
exit -1
fi
if [[ ! -e $2 ]];
then
echo "error: second argument must be a file."
exit -2
fi
echo "------ File =" $2 "------"
grep -ne "$1" "$2"
这是我正在使用的脚本,我需要新的一个来调用。我在问一个类似的问题时得到了很多帮助,但我仍然有点失落。我知道我可以使用-d命令来测试目录,然后使用'for'来循环命令,但究竟是怎么没有为我平移。
答案 0 :(得分:0)
我认为您只想将-H
选项添加到grep:
-H, --with-filename
Print the file name for each match. This is the default when there is more than one file to search.
答案 1 :(得分:0)
grep
有一个选项-r
,它可以帮助您避免测试第二个参数是一个目录,并使用for loop
来迭代该目录的所有文件。
来自man
页面:
-R,-r, - recursive 递归搜索列出的子目录。
它还会打印文件名。
[JS웃:~/Temp]$ grep -r '5' t
t:5 10 15
t:10 15 20
[JS웃:~/Temp]$ grep -r '5' perl/
perl//hello.pl:my $age=65;
perl//practice.pl:use v5.10;
perl//practice.pl:@array = (1,2,3,4,5);
perl//temp/person5.pm:#person5.pm
perl//temp/person9.pm: my @date = (localtime)[3,4,5];
perl//text.file:This is line 5