1

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

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

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

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

link1 -> file
link2 -> file

等等。有什么方法可以使用 grep 来完成此任务?

4

2 回答 2

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
于 2013-11-03T23:55:33.950 回答
0

是什么样的语言$argv[1]?(POSIX) Bourne Shell 不支持数组。脚本和函数的参数由 引用$1$2依此类推。为了grep不将模式中的第一个连字符视为选项,请使用--来表示选项的结束。接下来,单引号中没有参数替换,只有双引号。把它们放在一起,这可能会奏效:

set somename  # Sets $1 to somename
ls -l | xargs grep -- "-> $1"

如果您的 grep 不理解--,请尝试

ls -l | xargs grep ".*-> $1"
于 2013-11-03T21:40:14.677 回答