Nev*_*arn 3 command-line bash scripts text-processing
我有一个包含以下信息的文件:
用户名:sjohhny@email1.com 值一:xx:xx:xx:xx:xx:xx 值二:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 值三:Sjohhny@email1.com@[xx:xx] [三个值的混合] 用户名:Vsamba@email3.com 值一:mm:mm:mm:mm:mm:mm 数值二:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm 值三:Vsamba@email3.com@[xx:xx] [三个值的混合] 用户名:Skrids@email2.com 值一:yy:yy:yy:yy:yy:yy 值二:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy 值三:Skrids@email2.com@[xx:xx] [三个值的混合] 用户名:Vconan@email4.com 值一:zz:zz:zz:zz:zz:zz 值二:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz 值三:Vconan@email4.com@[xx:xx] [三个值的混合]
首先,我想过滤掉所有以 S 开头的用户名信息,保留那些以 V 开头的用户名。之后,我想制作一个可以运行的 .sh 脚本的最终产品。我想做的是:
所以,我的 .sh 文件将与此类似
echo 用户名:Vsamba@email3.com 你好 -一个 mm:mm:mm:mm:mm:mm -Two: mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm --谢谢 -访问 echo 用户名:Vconan@email4.com 你好一 zz:zz:zz:zz:zz:zz -二:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz --Thanks -for -参观
我在 Youtube 上观看了关于 Sed 的整个视频系列,并阅读了这里的许多文章,试图想出一个可以生成我想要的脚本的脚本,但都失败了。你能告诉我如何编写这样的脚本吗?如果您推荐新用户可以阅读的有关 sed(或 Awk 或 Perl)的网站/参考资料,我也很乐意
请注意,“:”的数量对于值一和值二来说是静态的,这可能会以某种方式使用。我尝试使用它,但每次当我只要求一个值时我得到了两个值,但是你比我更知道如何利用这个事实。
抱歉问了这么长的问题!在没有自动化过程的情况下完成所有这些需要花费太多时间,而且我完全在 linux 世界(和一般的计算机,就此而言!)
由于您的文件结构,之间用空行记录,我建议使用awk或perl以段落模式。例如,使用
RS=-F': |\n'如果字段$2以以下开头,然后打印所需的信息V:
awk -vRS= -F': |\n' '
$2 ~ /^V/ {
print "echo " $1 ": " $2;
print "Hello -One " $4, "-Two " $6 " --Thanks -for -visiting";
print "";
}' file
Run Code Online (Sandbox Code Playgroud)
给予
echo Username: Vsamba@email3.com
Hello -One mm:mm:mm:mm:mm:mm -Two mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm:mm --Thanks -for -visiting
echo Username: Vconan@email4.com
Hello -One zz:zz:zz:zz:zz:zz -Two zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz --Thanks -for -visiting
Run Code Online (Sandbox Code Playgroud)