Linux下如何提取文本文件每行的日期值并赋值给变量
在Linux中提取文本文件指定日期值并存入变量的方法
首先,你的文本文件内容如下:
1:0:d=2016080100:REFC:entire atmosphere:anl
2:415003:d=2016080100:RETOP:cloud top:anl
下面几种方法都能帮你提取每行中的2016080100值并存入变量,根据你的习惯选就行:
方法1:使用awk(推荐,处理结构化文本更灵活)
awk可以直接按分隔符拆分字段,精准提取目标内容:
# 提取第一行的日期值并存入变量date_var date_var=$(awk -F ':' '{split($3, arr, "="); print arr[2]; exit}' your_file.txt) # 验证变量内容 echo $date_var
解释:
-F ':'指定每行的分隔符为冒号split($3, arr, "=")将第三段(d=2016080100)按等号拆分成数组,arr[2]就是我们要的日期数字exit只处理第一行(如果所有行的日期值相同,这一步很高效;如果需要处理所有行,去掉exit即可)
方法2:grep + cut组合
用grep匹配目标模式,再用cut拆分提取:
date_var=$(grep -o 'd=[0-9]*' your_file.txt | head -n1 | cut -d'=' -f2) echo $date_var
解释:
grep -o 'd=[0-9]*'只输出每行中匹配d+等号+数字的部分head -n1取第一行的匹配结果(同样,去掉它可以处理所有行)cut -d'=' -f2按等号拆分,取第二部分的数字
方法3:使用sed正则匹配
sed通过正则捕获目标内容:
date_var=$(sed -n 's/.*d=\([0-9]*\):.*/\1/p' your_file.txt | head -n1) echo $date_var
解释:
-n只输出匹配的行s/.*d=\([0-9]*\):.*/\1/p用正则捕获d=和下一个冒号之间的数字,替换为捕获到的内容并打印head -n1取第一行结果
如果所有行的日期值都相同,上面的方法取第一行就足够;如果需要遍历所有行的日期值,可以去掉exit或head -n1,然后用循环处理变量内容。
内容的提问来源于stack exchange,提问作者bahram khazaei
相关产品推荐
相关产品推荐

