我正在编写一个快速程序,将工作目录中的所有软/符号链接列出到参数1中给出的文件。我知道我需要使用grep才能这样做,但是一般来说,我很难搞清楚如何编写正则表达式。在这种情况下,由于涉及变量($ argv [1])这一点特别困难。
有问题的代码(写得不好)如下:
ls -l | xargs grep '-> $argv[1]'
我的意图是捕获包含 - >的所有行。和指定的文件,例如
link1 -> file
link2 -> file
等等。有什么方法可以用grep来实现这个目标吗?
答案 0 :(得分:0)
$argv[1]
是什么类型的语言? (POSIX)Bourne Shell不支持数组。脚本和函数的参数由$1
,$2
引用,依此类推。
为了使grep
不将模式中的第一个连字符视为一个选项,请使用--
表示选项的结束。接下来,单引号中没有参数替换,仅在双qouotes中。总而言之,这可能有用:
set somename # Sets $1 to somename
ls -l | xargs grep -- "-> $1"
如果您的grep不理解--
,请尝试
ls -l | xargs grep ".*-> $1"
答案 1 :(得分:0)
下面的脚本只能找到软/符号链接文件,并且只有在这些文件中找到参数时才会列出,
# cat sygrep.sh
#!/bin/bash
if [ $# -eq 0 ]
then
echo "No arguments supplied"
else
for a in `find . -type l` ; do grep -irl '$1' $a ; done
fi
输出:
# ./sygrep.sh
No arguments supplied
# ./sygrep.sh root
./mytest.sh