繁体   English   中英

Shell脚本:当我从文件中读取值时如何避免空字符

[英]shell script : how to avoid null character when i read values from a file

我在一个文件中有很多值,并且一行中我得到一个空值。 空值是该文件中的最后一个值。 我想避免使用空值,并从文件中获取最后一个整数值。 任何人都可以用正则表达式来帮助我。 我可以在这里发布我尝试过的内容。

value=`cat $working_tmp_dir/numbers.txt|tail -3| head -1|cut -f2 -d'='|cut -b 1-8`

当我尝试以上时,我没有得到最后一个整数值..它给了我null。

文件中的样本值是:

date=11052015
date=11062015
date=11092015
date=11122015
date=11192015
date=12172015
date=20160202  
date="null value coming here"

数字之间的空格只是格式问题。 请帮我。

您可以使用awk解析文件,以获取与模式匹配的最后一行。

根据示例输出更新,如果该行以date=开头,则可以这样做

value=$(awk '/date=[0-9]/{a=$0}END{print a}' $working_tmp_dir/numbers.txt | grep -oP "\d+")

这将查找以数字开头的行并将其设置为变量a并且每次匹配都会执行此操作,因此最后一次匹配将是设置为变量的最终值。

您也可以这样做:

value=$(tail -n2 $working_tmp_dir/numbers.txt | grep -m1 -oP "(?<=date=)\d+$")

因此,基于样本输入,这会将变量value设置为20160202

这个awk命令应该可以工作:

awk -F= '$2+0 == $2{n=$2} END{print n}' file

20160202

$2+0 == $2仅在$2代表数字时才为真。

下列原因是否足够?

egrep '^[0-9]+$' your_file | tail -1

您只需使用grep过滤仅带有整数的行,然后选择带有tail的最后一行。

感谢所有评论。.我尝试了你们发布的所有内容,并且自己做了一些更改,并从你们那里学到了很多东西..非常感谢。 最后我尝试了这个,我得到了解决方案

value=`grep -Po "=\d+" $working_tmp_dir/numbers.txt |tail -1| sed 's/=//'`

这对我来说是完美的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM