我从 stdin 2 个变量中获得了以任意顺序给出的名称和数字。如何在 bash 脚本中正确识别它们,以便我可以按相同顺序(年龄、姓名)将它们打印在文件中
./a.sh Fred 18
./a.sh 17 Barbie
输出文件
18 Fred
17 Barbie
我不知道如何正确使用 sed 命令或正则表达式来做到这一点,请您帮忙吗?
答案1
最简单的解决方案是利用所有主要字符编码中数字位于字母之前的这一事实。只需将字符串拆分为多行,对行进行排序,然后将这些行合并为一行即可。
#!/bin/bash
printf '%s\n' "$@" | sort | xargs echo
输出:
$ ./a.sh Fred 18
18 Fred
$ ./a.sh 17 Barbie
17 Barbie
它甚至适用于多词名称,但您应该将名称括在引号中,以防止sort
改变单词的顺序。
$ ./a.sh "Fred Astaire" 18
18 Fred Astaire
$ ./a.sh Fred Astaire 18
18 Astaire Fred
答案2
您可以尝试以下操作:
arg1="$1"
arg2="$2"
[[ "$arg1" =~ ^[0-9]+$ ]] && echo "$arg1 $arg2" ||
echo "$arg2 $arg1"