shell - 如何在 AWK 中一起打印 $1、$2 以及所有剩余参数

标签 shell awk sed

我正在制作一个从基本文件生成别名/缩写的脚本。基本文件结构是这样的:

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/

相关文章:

c - 在 C 中使用 read() 和 write() 代替 scanf() 和 printf()

Linux Shell 脚本文件和目录循环

bash - 拆分 CSV 并使用 awk 添加标题和索引列

regex - 选择两个模式之间的第一个匹配项。如果使用 sed/awk/grep 找到第三个模式,则重新开始搜索

linux - 查找与正则表达式的链接

PHP + Shell 返回 HTML

bash - bash中除第一个单词外的字符串的相反顺序

linux - Bash:比较两个文件并更改输出

bash - 在第二个模式 sed 之后删除行

linux - 如何使用 cut 以不同格式输出初始行?