用grep查找软链接

时间:2013-11-03 21:22:29

标签: regex unix grep symlink

我正在编写一个快速程序,将工作目录中的所有软/符号链接列出到参数1中给出的文件。我知道我需要使用grep才能这样做,但是一般来说,我很难搞清楚如何编写正则表达式。在这种情况下,由于涉及变量($ argv [1])这一点特别困难。

有问题的代码(写得不好)如下:

ls -l | xargs grep '-> $argv[1]'

我的意图是捕获包含 - >的所有行。和指定的文件,例如

link1 -> file
link2 -> file

等等。有什么方法可以用grep来实现这个目标吗?

2 个答案:

答案 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