Perl正規表現で%トークンを置き換えますが、\%は変更しないでください。

Perl正規表現で%トークンを置き換えますが、\%は変更しないでください。

[^\]%トークンの代わりにsed - コマンドでトークンを置き換える方法が気になります。\%回答。後ろ姿は必要ないと思います。

私は現在Sedコマンドですが、ここではPerlが必須だと思います。

cat something | sed 's#%.*</#</#'                

さらに、%シンボルの後ろのすべてのコンテンツ、つまりLaTeXのすべてのコメントは削除されますが、パーセント値は削除されません。

Perlで失敗した試み

cat something | perl 's#[^\]%.*</#</#'

私はPerlがcatの標準出力を取得する方法を知りません。

データ

------------------------------
Protocol of pre-eclampsia
------------------------------
Monitoring in 90\% cases

Antihypertensives when % this is a comment, please, remove me!
$SBP/DBP > 160/110$; slowly.     
------------------------------

希望の出力

------------------------------
Protocol of pre-eclampsia
------------------------------
Monitoring in 90\% cases

Antihypertensives when
$SBP/DBP > 160/110$; slowly.     
------------------------------

%そうせずにどのようにフラグを交換できますか\%? Sedでこれを行うことができる場合は、コメントを残してください。

ベストアンサー1

多くの(ほとんどではありませんが)テキスト解析ツールがperlコマンドラインから入力を受け取るため、必須ではありませんcat-eスクリプトをコマンドライン引数として渡すために必要です。-nつまり、「入力の各行でスクリプトを実行します」を意味します。 「.」または-p「各入力行でスクリプトを実行してからその行を印刷する」スイッチを使用できます。 )。

perl -pe 's/foo/bar/' file
cat file | perl -pe 's/foo/bar/'

今私が正しく理解したら、すべてのLaTeXコメントを削除したいと思います(あなたの質問にはありませんが)。もしそうなら、後ろを見て最も簡単な方法は次のとおりです。

perl -pe 's/(?<!\\)%.*//' file 

正規表現も機能するはずです。以前に一致した文字を保持して%バックスラッシュをエスケープするだけです。

perl -pe 's/(^|[^\\]+)%.*/$1/' file

GNUでも同じことができますsed

sed -r 's/(^|[^\\])%.*/\1/' file

おすすめ記事