我有一个名为email.txt的文件,如下所示:
Subject:My test
From:my email <myemail@gmail.com>
this is third test
Run Code Online (Sandbox Code Playgroud)
我想通过使用bash脚本只取出这个文件中的电子邮件地址.所以我把这个脚本放在我的名为myscript的bash脚本中:
#!/bin/bash
file=$(myscript)
var1=$(awk 'NR==2' $file)
var2=$("$var1" | (grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'))
echo $var2
Run Code Online (Sandbox Code Playgroud)
但我无法运行此脚本.当我在bash中手动运行此命令时,我可以获取电子邮件地址:
echo $var1 | grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'
Run Code Online (Sandbox Code Playgroud)
我需要将电子邮件地址存储在变量中,以便我可以在其他函数中使用它.有人可以告诉我如何解决这个问题吗?谢谢.
fle*_*esk 17
我认为这是一个过于复杂的方法,但如果你只想让你的脚本工作,试试这个:
#!/bin/bash
file="email.txt"
var1=$(awk 'NR==2' $file)
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b')
echo $var2
Run Code Online (Sandbox Code Playgroud)
我不确定file=$(myscript)应该做什么,但是在下一行你想要一个文件名作为参数awk,所以你应该只分配email.txt一个字符串值file,而不是执行一个名为的命令myscript.$var1不是一个命令(它只是你的文本文件中的一行),所以你必须给echo它一些grep有用的东西.附加的括号grep是多余的.
小智 9
这是怎么回事:
var2=$("$var1" | (grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'))
^^^^^^^ Execute the program named (what is in variable var1).
Run Code Online (Sandbox Code Playgroud)
你需要做这样的事情:
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b')
Run Code Online (Sandbox Code Playgroud)
甚至
var2=$(awk 'NR==2' $file | grep -Eio '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b')
Run Code Online (Sandbox Code Playgroud)