我有一个文件,其中有一些行写在临时目录中。我的目标是提取第二个下划线和点(。)之间的值。例如,
以下是filesample.txt
的内容示例:
--rwxr-x--- 235 2016-08-24 05:13 File_Name_2696553.txt
--rwxr-x--- 1274 2016-09-14 04:44 File_Name_2852659.xls
--rwxr-x--- 1802 2016-09-14 05:04 File_Name_2852992.pdf
我所做的是以下内容:
cat ${tmp}filesample.txt | cut -b64- | awk -F"." '{ print $1 }'
这给了我想要的输出。但是,我认为更好的解决方案是在第二个下划线和点之间设置代码。
这样,如果每行内容末尾的7位数字变为8或更多,我不必回到我的脚本并调整它,因为cut -b64-
正在查看第64位位置字节。
这可能是一个基本问题,我是bash脚本的新手。
答案 0 :(得分:3)
您可以使用awk '{split($NF, a, "[_.]"); print a[3]}' file
:
$ awk '{split($NF, a, "[_.]"); print a[3]}' file
2696553
2852659
2852992
<强>测试强>
jsonObject = {
"log": [{
"date": "15/09/2016",
"time": "15:35:56",
"temp": "16.0",
"humidity": "95.0"
}, {
"date": "15/09/2016",
"time": "15:35:59",
"temp": "30.0",
"humidity": "61.0"
}, {
"date": "15/09/2016",
"time": "15:36:03",
"temp": "30.0",
"humidity": "60.0"
}]
}
答案 1 :(得分:2)
要获得第二个_
和下一个DOT
之间的值,您可以使用:
awk '{split($NF, a, /_/); sub(/\..*/, "", a[3]); print a[3]}' filesample.txt
2696553
2852659
2852992
split
函数,我们将_
(下划线)归档到最后归档,并取a[3]
这是第二_
之后的值sub
函数,我们在DOT
之后剥离所有内容,从而在第二个_
和下一个DOT之间提供值答案 2 :(得分:2)
使用sed:
"My firstName is" + firstName + LastName
它捕获并输出最后一个下划线和最后一个点之间的值。
答案 3 :(得分:1)
$ cat ip.txt
--rwxr-x--- 235 2016-08-24 05:13 File_Name_2696553.txt
--rwxr-x--- 1274 2016-09-14 04:44 File_Name_2852659.xls
--rwxr-x--- 1802 2016-09-14 05:04 File_Name_2852992.pdf
$ grep -oP '.*_\K\d+' ip.txt
2696553
2852659
2852992
o
仅输出匹配的文字P
使用基于perl的正则表达式.*_
以贪婪的方式将文字与_
匹配\K
使用正面的后置,匹配的文字直到那时不会成为输出的一部分\d+
一个或多个数字答案 4 :(得分:1)
awk -F'[_.]' '{print $(NF-1)}' file
2696553
2852659
2852992
答案 5 :(得分:0)
使用bash
regex
匹配的小尝试
$ while read -r line; do [[ $line =~ _([[:digit:]]{7,}). ]] && \
NUM=${BASH_REMATCH[1]}; echo $NUM; done < <(awk '{print $5}' file)
2696553
2852659
2852992
输入file
为
--rwxr-x--- 235 2016-08-24 05:13 File_Name_2696553.txt
--rwxr-x--- 1274 2016-09-14 04:44 File_Name_2852659.xls
--rwxr-x--- 1802 2016-09-14 05:04 File_Name_2852992.pdf