我是一个完全 Perl 的菜鸟,并试图弄清楚这件事是否可以完成。我有一个文本文件,其中包含公式名称等数据,然后是下一行(单行)中的公式,如下所示 -
Formula Name = abc formula for TAT
count(a)+500
公式名称是唯一的。我需要搜索公式名称,然后在下一行替换公式。做这个的最好方式是什么?可以用perl命令行完成吗?
似乎命令行一次读取一行文件,我需要使用-0NNN
开关才能在多行上进行操作。但我不确定如何使用它。
提前致谢!
Ĵ
我是一个完全 Perl 的菜鸟,并试图弄清楚这件事是否可以完成。我有一个文本文件,其中包含公式名称等数据,然后是下一行(单行)中的公式,如下所示 -
Formula Name = abc formula for TAT
count(a)+500
公式名称是唯一的。我需要搜索公式名称,然后在下一行替换公式。做这个的最好方式是什么?可以用perl命令行完成吗?
似乎命令行一次读取一行文件,我需要使用-0NNN
开关才能在多行上进行操作。但我不确定如何使用它。
提前致谢!
Ĵ
您不需要使用该-0777
选项,您可以简单地阅读并丢弃一行,然后将您想要的任何内容添加到当前行。
perl -pe 'if (/Formula Name/) { <>; $_ .= "new formula$/"; }' filename
我曾经$/
代表您的换行符,因为它应该与 readline 使用的相同。但你也可以使用\n
。要进行就地编辑,只需添加-i.bak
开关。
我认为在这种情况下可以使用 perl。但现在我知道一种在 SED 中解决的方法。它有助于?
$ cat xxx
Formula Name blablabla
cos(x) + i sen(x)
other stuff
$ sed '/Formula Name/{n;s/.*/e=mc2/;}' xxx
Formula Name blablabla
e=mc2
other stuff
要在 perl 中做到这一点,我们需要多几行,我会尝试一些示例,稍后再写在这里。
编辑:
$ perl -ne 's/.*/e=mc2/ if $find; print; $find=/Formula Name/;' xxx
Formula Name blablabla
e=mc2
other stuff
bash
句法:
perl -i.vixmp -pe'
s/\Q$name\E/\U$name/ if $name;
($name) = /Formula Name = (\S+)/;
' file
cmd
句法:
perl -i.vixmp -pe"
s/\Q$name\E/\U$name/ if $name;
($name) = /Formula Name = (\S+)/;
" file
您没有准确指定需要替换的内容以及需要替换的内容,因此将公式名称替换为大写。根据需要进行调整。
如果您要查找特定公式而不是所有公式,只需更改\S+
您要查找的公式的名称即可。
重要提示:您必须从版本中删除换行符cmd
才能使其正常工作。(我使用它们是为了便于阅读。)您可以从版本中删除换行符bash
,但它是可选的。
您可以使用替换正则表达式来做到这一点。您可以将文本的每一行与正则表达式匹配,然后根据需要替换第二部分,例如这样的东西应该可以工作:
$repl = "replacement formula for the line";
$line =~ s/(Formula Name\s=\s)([\w]\d]+)$/$1 $repl/;