grep命令尝试获取数值

时间:2018-11-08 19:24:42

标签: linux unix grep numeric

从文件下面的文本:

current_build: 22
previous_build: 55

我只是尝试grep current_build的数字值。

按照以下命令运行

grep -o -E '[0-9]+' textfile

输出是两个数字,如下所示

22    
55

我如何只grep值22

3 个答案:

答案 0 :(得分:1)

使用GNU grep:

grep -Po 'current_build: \K.*' file
  

\K:删除\ K之前的匹配部分

输出:

22

答案 1 :(得分:1)

我将使用#include <iostream> #include <time.h> bool equalTMs(tm& tm1, tm& tm2); void printTM(tm& myTM); int main() { tm myTM; time_t datetime = 1530173696; //datetime = 1530176399; // to check the time_t value of 8:59 AM gmtime_s(&myTM, &datetime); myTM.tm_sec = 0; myTM.tm_min = 0; time_t myTime_T = mktime(&myTM); tm sanityCheckTM; time_t roundedDownToNearestHour = 1530172800; gmtime_s(&sanityCheckTM, &roundedDownToNearestHour); time_t sanityCheckTimeT = mktime(&sanityCheckTM); std::cout << "datetime: " << datetime << std::endl; std::cout << "myTime_T: " << myTime_T << std::endl; std::cout << std::endl; std::cout << "roundedDownToNearestHour: " << roundedDownToNearestHour << std::endl; std::cout << "sanityCheckTimeT: " << sanityCheckTimeT << std::endl; std::cout << std::endl; std::cout << "myTM and sanityCheckTM equal? " << (equalTMs(myTM, sanityCheckTM) ? "true" : "false") << std::endl; std::cout << "\nmyTM:-\n\n"; printTM(myTM); std::cout << "\nsanityCheckTM:-\n\n"; printTM(sanityCheckTM); std::cout << "\n"; time_t _time_t = 1530158400; tm _tm; gmtime_s(&_tm, &_time_t); std::cout << "_time_t: " << _time_t << std::endl; std::cout << "_tm and sanityCheckTM equal? " << (equalTMs(_tm, sanityCheckTM) ? "true" : "false") << std::endl; std::cout << "\n_tm:-\n\n"; printTM(_tm); } void printTM(tm& myTM) { std::cout << "tm_sec: " << myTM.tm_sec << std::endl; std::cout << "tm_min: " << myTM.tm_min << std::endl; std::cout << "tm_hour: " << myTM.tm_hour << std::endl; std::cout << "tm_mday: " << myTM.tm_mday << std::endl; std::cout << "tm_mon: " << myTM.tm_mon << std::endl; std::cout << "tm_year: " << myTM.tm_year << std::endl; std::cout << "tm_wday: " << myTM.tm_wday << std::endl; std::cout << "tm_yday: " << myTM.tm_yday << std::endl; std::cout << "tm_isdst: " << myTM.tm_isdst << std::endl; } bool equalTMs(tm& tm1, tm& tm2) { return (tm1.tm_sec == tm2.tm_sec) && (tm1.tm_min == tm2.tm_min) && (tm1.tm_hour == tm2.tm_hour) && (tm1.tm_mday == tm2.tm_mday) && (tm1.tm_mon == tm2.tm_mon) && (tm1.tm_year == tm2.tm_year) && (tm1.tm_wday == tm2.tm_wday) && (tm1.tm_yday == tm2.tm_yday) && (tm1.tm_isdst == tm2.tm_isdst); } ,因为它与grep awk相反,后者仅适用于GNU grep:

-o

awk '/current_build/{print $NF}' file 将输入分为个字段。默认的字段分隔符是空白字符的序列。 awk字段数NF是最后一个字段。

答案 2 :(得分:0)

仅在行首打印与current_build匹配的行,并在最后一个空格之后显示部分:

sed -n 's/current_build:.* //p' file