[英]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.