如何从文件中搜索和剪切字符串?

如何从文件中搜索和剪切字符串?

我正在尝试编写一个带有如下选项和参数的程序:

./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具有不同的含义:第一个将其扩展为您给出的第一个参数,第二个将其解释为第一列的快捷方式。这就是为什么我们需要在命令周围加上单引号(),这样就不会扩展,但可以让它不受影响地进行解析。bashawk'awkprintbash$1awk

相关内容