如何只通过Shell脚本获取文件中的数字

时间:2015-08-08 01:21:27

标签: bash shell unix command sh

我的问题是要找人出席,但他已经用错误的模式两次给出了他的约会,如 jul22 22jul 。我想证明两者都是一样的。

attendF 文件数据如下所示 -

PersonsName,month
sriram,jul22 
sriram,22jul 

我的想法:首先,我在 attendF 文件中提供他所提供的月份模式  #grep -i "personName" attendF | cut -t"," -k2,2 > mnthFile

mnthFile 的数据如下:

 jul22
 jul23
 22jul
 jul24
 23 jul

我希望输出为:
 jul22
 jul23
 jul24
   (或)
 22jul
 23月18日  jul24
在那里,我可以得到正确的出席率。

1 个答案:

答案 0 :(得分:0)

如果您正在询问如何将不同日期标准化为单一格式以便进行比较,则以下NSArray *results = [json objectForKey:@"status"]; //now go through the array getting each image for(NSDictionary *item in results) { NSString *imageURL = item[@"slider_image_path"]; //short cut method to grab the image (credit below) UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]]; //we're on a background thread, so switch to main thread to update the UI dispatch_async(dispatch_get_main_queue(), ^{ //set each image goes here }); } 函数(以及小型测试工具)将为您执行此操作。

首先是小写字符串然后删除所有既不是字母也不是数字的字符。

然后,如果它既不是normalise也不是alpha-number,它只返回一个合适的错误值number-alpha

但是,假设是其中一种格式的,它会将其分为日期和月份,然后以一致的格式返回:

?

该脚本的输出是:

#!/usr/bin/env bash

normalise() {
        # Lowercase it and remove non-alphanumerics.

        str="$(echo "$1" | tr '[A-Z]' '[a-z]' | sed 's/[^a-z0-9]//g')"

        # Check one of the allowed formats.

        if [[ ! "${str}" =~ ^[0-9]+[a-z]+$ ]] ; then
                if [[ ! "${str}" =~ ^[a-z]+[0-9]+$ ]] ; then
                        echo '?'
                        return
                fi
        fi

        # Extract the day andd month, return normalised value.

        day="$(echo "$str" | sed 's/[a-z]//g')"
        mon="$(echo "$str" | sed 's/[0-9]//g')"
        echo "${day}-${mon}"
}

echo $(normalise "Jul 22")
echo $(normalise "jUl-22")
echo $(normalise "juL22")
echo $(normalise "Jul.22")
echo $(normalise "22 jUl")
echo $(normalise "22-juL")
echo $(normalise "22Jul")
echo $(normalise "22.jUl")
echo $(normalise "22.jUl.1977")