Blu*_*Vio 3 grep alias csh quoting regular-expression
我正在 cshell 中尝试以下别名:
alias sll 'ls -l \!* | grep -oE '[^ ]+$' | paste -s | xargs ls -l'
Run Code Online (Sandbox Code Playgroud)
对于这个 CSH 说,非法变量名。
如果我使用\$,别名将被设置而不会出现任何错误。但是当我使用这个别名时,我得到,grep: Invalid regular expression
PS:
ls -Ll <filenames>符号链接引用的文件的完整路径。awk '{print $NF}'. 即便如此,CSH 也会给出错误:NF 未定义变量。检查您的单引号。单引号不会神奇地嵌套。
alias sll 'ls -l \!* | grep -oE '\''[^ ]+$'\'' | xargs ls -ld --'
Run Code Online (Sandbox Code Playgroud)
由于以下几个原因,这仍然存在缺陷:
[^ ],这不适用于包含空格的文件或链接目标名称。xargs, 这不适用于包含撇号、反斜杠、双引号、其他类型空格的文件/目标名称。ls是当前目录的相对路径,而符号链接是相对于符号链接文件的路径解析的(如果您有一个a/b/c -> d链接,指向 ,而a/b/d不是d在当前目录中)。total <n>的输出线ls。ls -lL(可能是你想要的)。使用zsh,你可以做到:
ls -ld -- *(:A)
Run Code Online (Sandbox Code Playgroud)
该:A修改扩展符号链接到他们的经典绝对路径。
GNU 系统上的准等价物:
readlink -fz -- * | xargs -r0 ls -ld --
Run Code Online (Sandbox Code Playgroud)