簡體   English   中英

別名中的awk / sed內的變量

[英]variable inside awk/sed in 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" *; }

你可以試試這個,

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

與csh中的別名不同,bash別名不允許參數; 請參閱創建帶參數的Bash別名? 並將參數傳遞給bash中的別名 ,以及如何將命令行參數傳遞給shell別名? 以及如何在bash別名中包含參數?

所以你需要一個功能。 如果您使用帶-s開關的GNU sed,則以下內容將起作用:

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

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

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

請注意{必要后的空格。 "$f"使用雙引號可以防止帶有錯誤字符的文件名,例如空格或星號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM