我是一个完整的Perl noob并试图弄清楚这件事是否可以完成。我有一个文本文件,其中包含公式名称等数据,然后是下一行(单行)中的公式,如此 -
Formula Name = abc formula for TAT
count(a)+500
公式名称是唯一的。我需要搜索公式名称,然后在下一行中替换公式。做这个的最好方式是什么?可以使用perl命令行吗?
似乎命令行一次读取一行文件,我需要使用-0NNN
开关才能在多行上操作。但我不知道如何使用它。
提前致谢!
Ĵ
答案 0 :(得分:4)
您不需要使用-0777
选项,只需阅读并丢弃一行,然后将您想要的任何内容添加到当前行。
perl -pe 'if (/Formula Name/) { <>; $_ .= "new formula$/"; }' filename
我使用$/
来表示换行符,因为它应该与readline使用的相同。但您也可以使用\n
。要进行就地编辑,只需添加-i.bak
开关。
答案 1 :(得分:2)
我认为在这种情况下可以使用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
答案 2 :(得分:2)
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
版本中删除换行符,但它是可选的。
答案 3 :(得分:1)
您可以使用替换正则表达式来执行此操作。您可以将文本的每一行与常规表达相匹配,然后根据需要替换第二部分,例如,这样的内容应该有效:
$repl = "replacement formula for the line";
$line =~ s/(Formula Name\s=\s)([\w]\d]+)$/$1 $repl/;