我想写一个别名来打印文件夹中所有文件的特定行,即:
$ 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" *; }
答案 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"
中使用双引号防范带有错误字符的文件名,例如空格或星号。