Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 别名中awk/sed内的变量_Bash_Sed_Awk_Alias - Fatal编程技术网

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;}