Perlファイルの+行は行と一致し、バックスラッシュ文字を無視します。

Perlファイルの+行は行と一致し、バックスラッシュ文字を無視します。

次のファイルがあります( file1 )

その他のファイル 1

<?xml version="1.0" encoding="UTF-8"?>

 <apps>
 <app name="UAT/ECC/Global/MES/1206/MRP-S23"  ear="UAT/ECC/Global/MES/1206/MRP-S23.ear" xml="UAT/ECC/Glal/ME/120/MRP- S23.xml"/>
  <app name="OQ/ediedbn/adSFSF/adSFSF-CL" ear="OQ/ebn/aSF/adSF- CL.ear" xml="OQ/ediedbn/adSFSF/adSSF-CL.xml"/>
 <app name="OQ/ediedbn/adaEBS/adOrBS-HR-CL"  ear="OQ/ediedbn/adOraS/araEBS-HR-CL.ear" xml="OQ/eddbn/aOraEBS/adOEBS-   HR-CL.xml"/>
<app name="UAT/CZ/LIMS/T068_01/LIMS-QA-S03" ear="UAT/CZ/LIS/T068_01/LIS-QA-S03.ear" xml="UAT/CZ/LIMS/T068_01/LIMS-QA-S03.xml"/>
 .
 .
 .

以下は、file1で一致させる必要のある行の例です。

その他のファイル 2

OQ-63/ECC/Glal/Interny/Adapter_Services/adOraEBS-NA
OQ-63/ECC/Glal/MES/58,61/ECC-MRP-S20
OQ-63/ECC/Glbal/MES/CZ/adum-CZ-Adapter
OQ-63/EC/Glal/TI/Adaptvices/adTIS

file1のfile2の行を一致させ、バックスラッシュや他の一般的ではない文字を無視するためにPerl oneliner構文への最善のアプローチは何ですか?

これを試しましたがうまくいきません

 a="OQ-63/ECC/Glal/Interny/Adapter_Services/adOraEBS-NA"

 perl -pe '/(^|\s)\Q$ENV{a}\E(\s|$)/'  file1

ベストアンサー1

試みにいくつかの問題があります。

  1. perl -pe はすべての行を印刷します。一致しない行を削除するか、-nを使用して明示的に印刷する必要があります。
  2. 一致する文字列の前には引用符が付いていますが、\ sを確認してください。
  3. テストのために、file1 と file2 と一致するいくつかの行を表示すると便利です。 :)

だからこれはうまくいきます:

a="UAT/CZ/LIMS/T068_01/LIMS-QA-S03" perl -ne '/"\Q$ENV{a}\E"/ && print' file1

1行ですべての一致を実行するには、次のようにします。

perl -ne 'BEGIN { open(F2, shift); $re=join("|", map {chomp($_); "\"\Q${_}\E\"";} <F2>);} /$re/ && print' file2 file1

おすすめ記事