我正在制作一个从基本文件生成别名/缩写的脚本。基本文件结构是这样的:
sctl sudo systemctl
pac sudo pacman
这适用于读取基本文件的以下代码,删除注释并 awks 缩写文件上的缩写行:
sed "s/\s*#.*$//;/^\s*$/d" $command_file |
awk -v c=$cmd -v o="$comp" '{ print c" "$1""o"\""$2" "$3"\"" }' >> $file
最终的结果应该是这样的:
abbr sctl "sudo systemctl"
abbr pac "sudo pacman"
但是当该行在第三个参数之后有很多部分时,这段代码不起作用:
svu playerctl -p spotify volume +0.05
我怎样才能以那种格式打印? $1 $2 ($3..$N)
最佳答案
您可以删除前两个字段并修剪剩余部分的空间,例如。
{
printf "%s %s ", $1, $2
$1=$2=""; sub(/^\s*/, "", $0);
printf "\"%s\"\n", $0
}
输出类似,
svu playerctl "-p spotify volume +0.05"
注意:正如 Ed Morton 所指出的,\s
正则表达式需要 gnu awk。
关于shell - 如何在 AWK 中一起打印 $1、$2 以及所有剩余参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377902/