我正在尝试编写一个带有如下选项和参数的程序:
./program.sh -f <filename> -string <string>
该程序应该输出<filename>
以<string>
如下内容开头的行:
grep ^<string> <filename>
另外,它还应该返回一些与字符串相关的信息,例如以下示例输入文件中的姓名和年龄:
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
我怎样才能实现这样的行为?
答案1
如此简单的操作只需一行代码即可完成,无需编写整个脚本。我会使用一个函数,您可以将其放入文件中,~/.bash_aliases
这样它就会加载到您打开的每个终端中。
function_name(){ awk /^$2/'{print $1": "$2", "$3}' $1 ;}
这样您就可以调用function_name <filename> <string>
并获取如下所示的结果:
$ cat test
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
$ function_name test Akdk
Akdk: john, 22
如您所见,您可以在不使用任何选项的情况下实现此目标,仅使用参数要简单得多。如果您需要选项,我建议您本教程和本文。
解释
function_name(){ … ;}
function_name
–定义函数…
awk /^$2/'{…}' $1
– 在作为函数第一个参数给出的文件中 ($1
) 搜索以该函数的^
第二个参数 ( ) 开头的行 ( )$2
并执行该…
操作awk '{print $1": "$2", "$3}'
– 打印第一列(空格分隔),然后打印“:”,然后打印第二列,然后打印“,”,然后打印第三列
注意:Eg对于(运行终端的程序)$1
具有不同的含义:第一个将其扩展为您给出的第一个参数,第二个将其解释为第一列的快捷方式。这就是为什么我们需要在命令周围加上单引号(),这样就不会扩展,但可以让它不受影响地进行解析。bash
awk
'
awk
print
bash
$1
awk