我在文本文件中有一堆数字如下(例如
r0 = 204
r1 = 205
max_gap = 20u
min = 0
max = 8
thickness = 2
color = green
fill_under = yes
fill_color = green
r0 = 205
r1 = 206
我想用r0 = 100除以任何一行,这样该行就会读取
r0 = 20.4
我想对r0和r1的所有行都这样做。有没有办法在perl中执行此操作?
这是我的尝试,但不起作用主要是因为我之前从未使用过perl,这就是为什么我会问这么简单的问题
#!/usr/bin/perl
$string= r0\s+=\s+\\(d+)
$num= $1/100
$num2= r0\s+=\s+\\$num
s/$string/$num2;
我可以从bash运行的一个班轮将会好得多。我知道它将涉及s / find / replace函数但不确定如何指定整数部分
答案 0 :(得分:3)
perl -pei 's#^(r[01]\s*=\s*)(\d+)$#$1.$2/100#e' filename
选项意味着:
-p
=在打印修改后的输入-e
=执行第一个参数中的代码-i
=用输出正则表达式位表示:
^
=行首r[01]
= r0
或r1
\s*=\s*
=任意数量的空白,=
和任意数量的空白\d+
= digits $
=行尾替换使用e
修饰符,这意味着它应该作为Perl表达式执行。 $1
和$2
是两个捕获组的内容:$1
是数字之前的所有内容,$2
是数字。 $2/100
将数字除以100
,.
将这两个部分连接在一起。
答案 1 :(得分:1)
作为一个单行:
perl -pi -e 's{^r[01]\s*=\s*\K(\d+)$}{$1/10}e' filename.txt
答案 2 :(得分:1)
以下是awk
解决方案:
awk '/^r[01]/ {$3/=100} 1' file
r0 = 2.04
r1 = 2.05
max_gap = 20u
min = 0
max = 8
thickness = 2
color = green
fill_under = yes
fill_color = green
r0 = 2.05
r1 = 2.06