成功为 awk 命令别名现在不会使用 OFS

成功为 awk 命令别名现在不会使用 OFS

所以我最终能够获得一个命令,能够从我想要的特定文件中获取和 grep 信息,然后我遇到了别名问题:

find ./ -type f -name filename.ext  -exec grep 'information' {} + | sort | awk -v OFS='\n' '{print $5, $1, $2, $3 }'

从那里我发现我需要在查找后更改我的别名,然后我这样做了:

find ./ -type f -name filename.ext  -exec grep 'information' {} + | sort | awk -v OFS='\n' '{print \$5, \$1, \$2, \$3 }'

所以现在它打印了,但我仍然想使用 OFS,但我不确定加载 OFS 的语法。提前致谢!

 alias aliascommand="find ./ -type f -name filename.ext  -exec grep 'information' {} + | sort | awk -v \OFS='\t' '{print \$5 \$1 \$2 \$3 }'"

我将上述内容的变体放入我的别名中。

答案1

如果你这样做:

alias foo="...'{print $5 $1 $2 $3 }'"

设置别名时,位置参数将被扩展。毕竟,它们位于双引号字符串内。你不希望这样,所以你必须用反斜杠转义它们。或者,您可以将整个别名文本放在单引号中,但由于您想在别名中使用单引号,这会变得相当困难。

\n不过,在双引号内应该没问题。

无论如何,您可能应该使用函数来代替。这样您就不需要考虑命令周围的额外引用。

mycommand() {
    find ./ -type f -name filename.ext -exec grep 'information' {} + |
       sort |
       awk -v OFS='\n' '{print $5, $1, $2, $3 }'
}

相关内容