别名中的awk / sed内的变量

时间:2014-03-08 09:39:04

标签: bash sed awk alias

我想写一个别名来打印文件夹中所有文件的特定行,即: $ print_line 20 - 将从文件夹中的所有文件打印第20行。

我花了一个小时在.bashrc中的各种构造(下面的一些例子),有很多不同的转义,但到目前为止没有任何效果。谢谢你的帮助。

alias a="for f in create*; do sed -n '\$1{p;q}' $f; done"

alias b="for f in create*; do awk 'NR==\$1{print $0}' $f; done"

function l { r=$(echo \'"$1"{p;q}\'); sed -n "$r" *; }

2 个答案:

答案 0 :(得分:3)

你可以试试这个,

printline() { for f in create*; do sed -n "$1{p;q}" $f; done ;}

答案 1 :(得分:0)

bash别名,与csh中的别名不同,不允许参数;请参阅Make a Bash alias that takes a parameter?Passing argument to alias in bash,以及How to pass command line arguments to a shell alias?How do I include parameters in a bash alias?

所以你需要一个功能。如果您的GNU sed带有-s开关,则以下内容将起作用:

   printline() { sed -ns "$1 p" create*;} 

否则,稍微修改sat的好答案,使用for循环:

   printline() { for f in create*; do sed -n "$1 p" "$f"; done;}

请注意{之后的空格。在"$f"中使用双引号防范带有错误字符的文件名,例如空格或星号。