Shell Bash替换或删除部分数字或字符串

时间:2017-04-18 12:58:04

标签: bash shell

美好的一天。

每天我收到一个数字列表,如下例所示:

11986542586
34988745236
2274563215
4532146587
11987455478
3652147859

正如你所看到的,他们中的一些人有9个(总共11个数字)作为第三个数字而有些不(总共10个数字,因为带有额外9个的是新的巴西移动数字格式和没有它的是旧格式。

问题是我必须使用两种格式的数字作为另一个脚本的参数,我通常都是手工完成。

我正在尝试创建一个脚本,该脚本读取手机号码的长度并检查它并添加或删除数字或字符串的“9”(如果满足数字条件)并将其保存在单独的文件条件中满足了。

到目前为止,我只能检查其长度,但我不知道如何添加或删除第三位数字中的“9”。

#!/bin/bash



Numbers_file="/FILES/dir/dir2/Numbers_File.txt"

while read Numbers
do

    LEN=${#Numbers}

    if [ $LEN -eq "11" ]; then
        echo "lenght = "$LEN
    elif [ $LEN -eq "10" ];then
        echo "lenght = "$LEN
    else
        echo "error"
    fi
done < $Numbers_file

3 个答案:

答案 0 :(得分:4)

您可以使用sed删除任何字符串的第三个字符,如下所示:

sed 's/.//3'

示例:

echo "11986542586" | sed 's/.//3'
1186542586

在第三个字符中添加9:

echo "2274563215" | sed 's/./&9/3'
22794563215

答案 1 :(得分:2)

如果您绝对确定在第三个位置发生的事件,您可以使用awk 'substr($0,3,1)=="9"{$0=substr($0,1,2)substr($0,4,length($0))}1' file 1186542586 3488745236 2274563215 4532146587 1187455478 3652147859 语句,如下所示,

POSIX

使用符合substr()的{​​{1}}功能,仅处理第3个位置9的行,并在不考虑该数字的情况下移动记录。

  

substr(s,m [,n])   返回从位置m开始的s的最多n个字符的子字符串,从1开始编号。如果省略n,或者如果n指定的字符数多于字符串中剩余的字符数,则子字符串的长度应受长度的限制。字符串s

答案 2 :(得分:1)

有很多文本操作工具可以做到这一点,但最轻的重量可能是cut,因为这就是它的全部。

cut只支持一个范围,但确实有一个反转函数,所以cut -c4只能给你第四个字符,但是加上--complement你得到的只是字符4。< / p>

echo 1234567890 | cut -c4 --complement
12356789