我正在尝试使用awk搜索1到65535之间的数字字符串,并为其添加*。这是我正在尝试的:
awk '/[1-65535]+$/ {$0=$0"*"} 1' file
当我运行该命令时,我没有看到文件中的数字字符串添加了星号。
将星号附加到值后,我想在星号前面添加一个星号:
awk '/1-65535]\* +$/ [$0="*"$0} 1' file
答案 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