Bash 别名中awk/sed内的变量
我想写一个别名,用于打印文件夹中所有文件的特定行,即:Bash 别名中awk/sed内的变量,bash,sed,awk,alias,Bash,Sed,Awk,Alias,我想写一个别名,用于打印文件夹中所有文件的特定行,即: $print\u line 20-将打印文件夹中所有文件的第20行 我花了数小时在.bashrc(下面的一些示例)中进行各种构造,进行了许多不同的转义,但到目前为止没有任何效果。谢谢你的帮助 alias a="for f in create*; do sed -n '\$1{p;q}' $f; done" 你可以试试这个 printline() { for f in create*; do sed -n "$1{p;q}" $f; d
$print\u line 20
-将打印文件夹中所有文件的第20行
我花了数小时在.bashrc(下面的一些示例)中进行各种构造,进行了许多不同的转义,但到目前为止没有任何效果。谢谢你的帮助
alias a="for f in create*; do sed -n '\$1{p;q}' $f; done"
你可以试试这个
printline() { for f in create*; do sed -n "$1{p;q}" $f; done ;}
bash别名与csh中的别名不同,不允许使用参数;看和,和 所以你需要一个函数。如果使用
-s
开关使用GNU,则以下操作将起作用:
printline() { sed -ns "$1 p" create*;}
否则,稍微修改sat的好答案,使用for循环:
printline() { for f in create*; do sed -n "$1 p" "$f"; done;}
注意,
{
后面的空格是必需的。在中使用双引号“$f”
防止文件名使用不好的字符,如空格或星星。为什么?awk'FNR==20'*
会像print\u line 20*
一样简洁,谢谢你的评论。显然,我对awk和shell也不太熟悉。
printline() { sed -ns "$1 p" create*;}
printline() { for f in create*; do sed -n "$1 p" "$f"; done;}