找到一个值并以awk附加到它

时间:2017-03-17 18:05:45

标签: awk

我正在尝试使用awk搜索1到65535之间的数字字符串,并为其添加*。这是我正在尝试的:

awk '/[1-65535]+$/ {$0=$0"*"} 1' file

当我运行该命令时,我没有看到文件中的数字字符串添加了星号。

将星号附加到值后,我想在星号前面添加一个星号:

awk '/1-65535]\* +$/ [$0="*"$0} 1' file

3 个答案:

答案 0 :(得分:1)

匹配1-65535的正则表达式如下:

[1-5]?[0-9]{4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5]

考虑并使用它,直到你准确地确定它,如果你真的想要进入正则表达式路线。如果/当您发布简明,可测试的样本输入和预期输出时,我们可以帮助您找到更好的方法。

答案 1 :(得分:0)

问题不明确(例如,输入文本中是否有负数),我使用gnu-awk显示FPAT解决方案,用于按内容进行拆分

  

cat file

1agauga 1 
65535 9gagayg aha hdhduhd6 65536
5
813 0 shshsi616agauga1

运行它,

awk 'BEGIN{FPAT="[^0-9]+|[0-9]+"}{
    for(i=1; i<=NF; ++i) {
        if($i~/^[0-9]+$/ && $i>=1 && $i<=65535) $i=$i"*"
        printf "%s%s",$i,(i==NF?ORS:"")
    }
}' file

你明白了,

1*agauga 1* 
65535* 9*gagayg aha hdhduhd6* 65536
5*
813* 0 shshsi616*agauga1*

答案 2 :(得分:0)

单独检查每个单词,如果它是一个数字,并且在1-65535之间附加*

$ cat foo
d foo 1 bar2 asd 100000 cash
ding dong 300 pork -5 this1
$ awk '{for(i=1;i<=NF;i++) if($i~/^[0-9]+$/ && $i>0 && $i<65536) $i=$i "*"}1' foo
d foo 1* bar2 asd 100000 cash
ding dong 300* pork -5 this1