我想用awk搜索1到65535之间的数字字符串,并在其中附加*。这是我正在尝试:找到一个值并将其附加到awk中
awk '/[1-65535]+$/ {$0=$0"*"} 1' file
当我运行该命令时,我看不到星号被添加到文件中的数字字符串。
追加星号的值后,我要在前面加上一个星号的值:
awk '/1-65535]\* +$/ [$0="*"$0} 1' file
我想用awk搜索1到65535之间的数字字符串,并在其中附加*。这是我正在尝试:找到一个值并将其附加到awk中
awk '/[1-65535]+$/ {$0=$0"*"} 1' file
当我运行该命令时,我看不到星号被添加到文件中的数字字符串。
追加星号的值后,我要在前面加上一个星号的值:
awk '/1-65535]\* +$/ [$0="*"$0} 1' file
的问题是不明确(例如,是否有在输入文本负数) ,我显示了使用FPAT
为劈裂的内容gnu-awk
解决方案
猫文件
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*
匹配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.65535] {1 ,5}是一个更容易的地狱 –
''[1.65535] {1,5}'意味着字符1,3,5,6或。重复1至5次。所以'66666'和'.'(一个时期)都会匹配,而'20'不会 - 也就是说,它不是您要求的。 –
分别检查每一个字,如果它是一个数字,它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
你的问题不清楚,请你必须包括例如输入和预期输出 –