3

私は完全な Perl 初心者であり、これが可能かどうかを理解しようとしています。数式名のようなデータを含むテキスト ファイルがあり、次の行 (1 行) の数式は次のようになります -

Formula Name = abc formula for TAT
count(a)+500

式名は一意です。数式名を検索して、次の行の数式を置き換える必要があります。これを行う最善の方法は何ですか?perl コマンドラインで実行できますか?

コマンドラインは一度に1行ずつファイルを読み取るようで、-0NNN複数行で操作できるようにするにはスイッチを使用する必要があります。しかし、これを使用する方法がわかりません。

前もって感謝します!

J

4

4 に答える 4

4

このオプションを使用する必要はありません-0777。単純に行を読み取って破棄し、必要なものを現在の行に追加できます。

perl -pe 'if (/Formula Name/) { <>; $_ .= "new formula$/"; }' filename

$/readlineが使用するものと同じでなければならないので、私はあなたの改行を表していました。\nしかし、同様に使用できます。インプレース編集を行うには、-i.bakスイッチを追加するだけです。

于 2012-05-11T18:57:54.320 に答える
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オプションです。

于 2012-05-11T19:19:37.570 に答える
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
于 2012-05-11T18:48:53.140 に答える
1

置換正規表現でそれを行うことができます。テキストの各行を正規表現と照合し、必要に応じて 2 番目の部分を置き換えることができます。たとえば、次のようなものが機能するはずです。

$repl = "replacement formula for the line";
$line =~ s/(Formula Name\s=\s)([\w]\d]+)$/$1 $repl/;
于 2012-05-11T18:53:24.377 に答える