无法理解 Perl 正则表达式替换行为
Can't understand Perl regex replace behavour
我有一些文本是从另一个命令通过管道传输的,如下所示:
source:project_dbt.common.business_days
source:project_dbt.common.cms_compare
source:project_dbt.common.cms_provider_national
source:project_dbt.common.gov_cms_data_Medicare-Claims_Reassignment-Sub-File_rta9-bts3
source:project_dbt.common.gov_cms_data_Medicare-Enrollment_Address-Sub-File_je57-c47h
source:project_dbt.common.gov_cms_data_Medicare-Enrollment_Base-Provider-Enrollment-File_ykfi-ffzq
source:project_dbt.common.gov_cms_data_Medicare-Enrollment_Secondary-Specialty_n48j-8qtj
source:project_dbt.common.gov_cms_data_Medicare-Part-D_Medicare-Provider-Utilization-and-Payment-Data-Par_icvy-hptt
source:project_dbt.common.gov_cms_data_Medicare-Physician-Supplier_Medicare-Physician-and-Other-Supplier-National-Pro_5fr6-cch3
source:project_dbt.common.gov_cms_data_provider-data_dataset_mj5m-pzi6_National_Downloadable_File
source:project_dbt.common.gov_cms_download_nppes_NPPES_Data_Dissemination
source:project_dbt.common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2019-Reporti_qsys-b88w
source:project_dbt.common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2020-Reporti_txng-a8vj
source:project_dbt.common.medicare_provider_utilization_and_payment_part_b
source:project_dbt.common.medicare_provider_utilization_and_payment_part_d
source:project_dbt.common.medicare_snf_claims_quality_measures
source:project_dbt.common.medicare_snf_health_deficiencies
source:project_dbt.common.medicare_snf_mds_quality_measures
source:project_dbt.common.medicare_snf_provider_information
source:project_dbt.common.medicare_snf_quality_reporting_program_provider_data
source:project_dbt.common.offices_v3
source:project_dbt.common.open_payments_providers_supplementary
source:project_dbt.common.provider_per_zip_v6
source:project_dbt.common.providers_per_team_v1
source:project_dbt.common.tam_predictors_v1
source:project_dbt.common.tam_results_per_provider_all_v2
source:project_dbt.common.tam_results_per_provider_latest
source:project_dbt.common.tam_territory_components_v1
source:project_dbt.common.territories_per_zip_v2
source:project_dbt.common.territories_v2
source:project_dbt.common.usa_census_data_20201022
source:project_dbt.geo.simplemaps_uszips
source:project_dbt.geo.zip
我想修改它以输入到 运行 的另一个命令 xargs
。
我试着用 perl
来实现这个:
cat /tmp/myfile.txt \
| perl -pe 's{^(source:project_dbt\.)(.+)$}{mycompany_ sav_}m'
以便我可以获得所需的输出(即我只想使用 2 个不同的前缀重复第二个捕获组):
mycompany_common.business_days sav_common.business_days
mycompany_common.cms_compare sav_common.cms_compare
mycompany_common.cms_provider_national sav_common.cms_provider_national
mycompany_common.sav_-File_rta9-bts3 sav_common.gov_cms_data_Medicare-sav_Claims_Reassignment-Sub-File_rta9-bts3
mycompany_common.sav_-File_je57-c47h sav_common.gov_cms_data_Medicare-sav_Enrollment_Address-Sub-File_je57-c47h
mycompany_common.sav_-Enrollment-File_ykfi-ffzq sav_common.gov_cms_data_Medicare-Enrollment_Base-sav_Provider-Enrollment-File_ykfi-ffzq
mycompany_common.sav_-8qtj sav_common.sav_gov_cms_data_Medicare-Enrollment_Secondary-Specialty_n48j-8qtj
mycompany_common.sav_-Provider-Utilization-and-Payment-Data-Par_icvy-hptt sav_common.gov_cms_data_Medicare-Part-D_Medicare-Provider-Utilization-and-sav_Payment-Data-Par_icvy-hptt
mycompany_common.sav_-Physician-and-Other-Supplier-National-Pro_5fr6-cch3 sav_common.gov_cms_data_Medicare-Physician-Supplier_Medicare-Physician-and-Other-sav_Supplier-National-Pro_5fr6-cch3
mycompany_common.sav_sav_common.gov_cms_data_provider-data_dataset_mj5m-pzi6_National_Downloadable_File
mycompany_common.gov_cms_download_nppes_NPPES_Data_Dissemination sav_common.gov_cms_download_nppes_NPPES_Data_Dissemination
mycompany_common.sav_-Detailed-Dataset-2019-Reporti_qsys-b88w sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-sav_Dataset-2019-Reporti_qsys-b88w
mycompany_common.sav_-Detailed-Dataset-2020-Reporti_txng-a8vj sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-sav_Dataset-2020-Reporti_txng-a8vj
mycompany_common.medicare_provider_utilization_and_payment_part_b sav_common.medicare_provider_utilization_and_payment_part_b
mycompany_common.medicare_provider_utilization_and_payment_part_d sav_common.medicare_provider_utilization_and_payment_part_d
mycompany_common.medicare_snf_claims_quality_measures sav_common.medicare_snf_claims_quality_measures
mycompany_common.medicare_snf_health_deficiencies sav_common.medicare_snf_health_deficiencies
mycompany_common.medicare_snf_mds_quality_measures sav_common.medicare_snf_mds_quality_measures
mycompany_common.medicare_snf_provider_information sav_common.medicare_snf_provider_information
mycompany_common.medicare_snf_quality_reporting_program_provider_data sav_common.medicare_snf_quality_reporting_program_provider_data
mycompany_common.offices_v3 sav_common.offices_v3
mycompany_common.open_payments_providers_supplementary sav_common.open_payments_providers_supplementary
mycompany_common.provider_per_zip_v6 sav_common.provider_per_zip_v6
mycompany_common.providers_per_team_v1 sav_common.providers_per_team_v1
mycompany_common.tam_predictors_v1 sav_common.tam_predictors_v1
mycompany_common.tam_results_per_provider_all_v2 sav_common.tam_results_per_provider_all_v2
mycompany_common.tam_results_per_provider_latest sav_common.tam_results_per_provider_latest
mycompany_common.tam_territory_components_v1 sav_common.tam_territory_components_v1
mycompany_common.territories_per_zip_v2 sav_common.territories_per_zip_v2
mycompany_common.territories_v2 sav_common.territories_v2
mycompany_common.usa_census_data_20201022 sav_common.usa_census_data_20201022
mycompany_geo.simplemaps_uszips sav_geo.simplemaps_uszips
mycompany_geo.zip sav_geo.zip
但是当运行这样做时,结果是:
sav_common.business_daysays
sav_common.cms_compareare
sav_common.cms_provider_nationalnal
sav_common.gov_cms_data_Medicare-Claims_Reassignment-Sub-File_rta9-bts3ts3
sav_common.gov_cms_data_Medicare-Enrollment_Address-Sub-File_je57-c47h47h
sav_common.gov_cms_data_Medicare-Enrollment_Base-Provider-Enrollment-File_ykfi-ffzqfzq
sav_common.gov_cms_data_Medicare-Enrollment_Secondary-Specialty_n48j-8qtjqtj
sav_common.gov_cms_data_Medicare-Part-D_Medicare-Provider-Utilization-and-Payment-Data-Par_icvy-hpttptt
sav_common.gov_cms_data_Medicare-Physician-Supplier_Medicare-Physician-and-Other-Supplier-National-Pro_5fr6-cch3ch3
sav_common.gov_cms_data_provider-data_dataset_mj5m-pzi6_National_Downloadable_Fileile
sav_common.gov_cms_download_nppes_NPPES_Data_Disseminationion
sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2019-Reporti_qsys-b88w88w
sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2020-Reporti_txng-a8vj8vj
sav_common.medicare_provider_utilization_and_payment_part_bt_b
sav_common.medicare_provider_utilization_and_payment_part_dt_d
sav_common.medicare_snf_claims_quality_measuresres
sav_common.medicare_snf_health_deficienciesies
sav_common.medicare_snf_mds_quality_measuresres
sav_common.medicare_snf_provider_informationion
sav_common.medicare_snf_quality_reporting_program_provider_dataata
sav_common.offices_v3_v3
sav_common.open_payments_providers_supplementaryary
sav_common.provider_per_zip_v6_v6
sav_common.providers_per_team_v1_v1
sav_common.tam_predictors_v1_v1
sav_common.tam_results_per_provider_all_v2_v2
sav_common.tam_results_per_provider_latestest
sav_common.tam_territory_components_v1_v1
sav_common.territories_per_zip_v2_v2
sav_common.territories_v2_v2
sav_common.usa_census_data_20201022022
sav_geo.simplemaps_uszipsips
sav_geo.zipzip
即第二个捕获组没有重复,而是将每行的最后 3 个字符附加到每一行...
我尝试了很多变体,但我无法确定我做错了什么。
在此先感谢您的帮助!
您将带有 Windows 行结尾 (CRLF) 的文件传递给期望 unix 行结尾 (LF) 的 Perl 版本。
给定输入
source:project_dbt.common.business_days␍␊
\___________________/|
Removed by -l
程序发出
mycompany_common.business_days␍ sav_common.business_days␍␊
\___________________/ \___________________/|
Added by -l
您的终端显示为
sav_common.business_days_days
\_______________________/\___/
Overwritten From original
将文件转换为 unix 文件(例如使用 dos2unix
)或删除尾随 CR (s/\s+\z//;
)。
我有一些文本是从另一个命令通过管道传输的,如下所示:
source:project_dbt.common.business_days
source:project_dbt.common.cms_compare
source:project_dbt.common.cms_provider_national
source:project_dbt.common.gov_cms_data_Medicare-Claims_Reassignment-Sub-File_rta9-bts3
source:project_dbt.common.gov_cms_data_Medicare-Enrollment_Address-Sub-File_je57-c47h
source:project_dbt.common.gov_cms_data_Medicare-Enrollment_Base-Provider-Enrollment-File_ykfi-ffzq
source:project_dbt.common.gov_cms_data_Medicare-Enrollment_Secondary-Specialty_n48j-8qtj
source:project_dbt.common.gov_cms_data_Medicare-Part-D_Medicare-Provider-Utilization-and-Payment-Data-Par_icvy-hptt
source:project_dbt.common.gov_cms_data_Medicare-Physician-Supplier_Medicare-Physician-and-Other-Supplier-National-Pro_5fr6-cch3
source:project_dbt.common.gov_cms_data_provider-data_dataset_mj5m-pzi6_National_Downloadable_File
source:project_dbt.common.gov_cms_download_nppes_NPPES_Data_Dissemination
source:project_dbt.common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2019-Reporti_qsys-b88w
source:project_dbt.common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2020-Reporti_txng-a8vj
source:project_dbt.common.medicare_provider_utilization_and_payment_part_b
source:project_dbt.common.medicare_provider_utilization_and_payment_part_d
source:project_dbt.common.medicare_snf_claims_quality_measures
source:project_dbt.common.medicare_snf_health_deficiencies
source:project_dbt.common.medicare_snf_mds_quality_measures
source:project_dbt.common.medicare_snf_provider_information
source:project_dbt.common.medicare_snf_quality_reporting_program_provider_data
source:project_dbt.common.offices_v3
source:project_dbt.common.open_payments_providers_supplementary
source:project_dbt.common.provider_per_zip_v6
source:project_dbt.common.providers_per_team_v1
source:project_dbt.common.tam_predictors_v1
source:project_dbt.common.tam_results_per_provider_all_v2
source:project_dbt.common.tam_results_per_provider_latest
source:project_dbt.common.tam_territory_components_v1
source:project_dbt.common.territories_per_zip_v2
source:project_dbt.common.territories_v2
source:project_dbt.common.usa_census_data_20201022
source:project_dbt.geo.simplemaps_uszips
source:project_dbt.geo.zip
我想修改它以输入到 运行 的另一个命令 xargs
。
我试着用 perl
来实现这个:
cat /tmp/myfile.txt \
| perl -pe 's{^(source:project_dbt\.)(.+)$}{mycompany_ sav_}m'
以便我可以获得所需的输出(即我只想使用 2 个不同的前缀重复第二个捕获组):
mycompany_common.business_days sav_common.business_days
mycompany_common.cms_compare sav_common.cms_compare
mycompany_common.cms_provider_national sav_common.cms_provider_national
mycompany_common.sav_-File_rta9-bts3 sav_common.gov_cms_data_Medicare-sav_Claims_Reassignment-Sub-File_rta9-bts3
mycompany_common.sav_-File_je57-c47h sav_common.gov_cms_data_Medicare-sav_Enrollment_Address-Sub-File_je57-c47h
mycompany_common.sav_-Enrollment-File_ykfi-ffzq sav_common.gov_cms_data_Medicare-Enrollment_Base-sav_Provider-Enrollment-File_ykfi-ffzq
mycompany_common.sav_-8qtj sav_common.sav_gov_cms_data_Medicare-Enrollment_Secondary-Specialty_n48j-8qtj
mycompany_common.sav_-Provider-Utilization-and-Payment-Data-Par_icvy-hptt sav_common.gov_cms_data_Medicare-Part-D_Medicare-Provider-Utilization-and-sav_Payment-Data-Par_icvy-hptt
mycompany_common.sav_-Physician-and-Other-Supplier-National-Pro_5fr6-cch3 sav_common.gov_cms_data_Medicare-Physician-Supplier_Medicare-Physician-and-Other-sav_Supplier-National-Pro_5fr6-cch3
mycompany_common.sav_sav_common.gov_cms_data_provider-data_dataset_mj5m-pzi6_National_Downloadable_File
mycompany_common.gov_cms_download_nppes_NPPES_Data_Dissemination sav_common.gov_cms_download_nppes_NPPES_Data_Dissemination
mycompany_common.sav_-Detailed-Dataset-2019-Reporti_qsys-b88w sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-sav_Dataset-2019-Reporti_qsys-b88w
mycompany_common.sav_-Detailed-Dataset-2020-Reporti_txng-a8vj sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-sav_Dataset-2020-Reporti_txng-a8vj
mycompany_common.medicare_provider_utilization_and_payment_part_b sav_common.medicare_provider_utilization_and_payment_part_b
mycompany_common.medicare_provider_utilization_and_payment_part_d sav_common.medicare_provider_utilization_and_payment_part_d
mycompany_common.medicare_snf_claims_quality_measures sav_common.medicare_snf_claims_quality_measures
mycompany_common.medicare_snf_health_deficiencies sav_common.medicare_snf_health_deficiencies
mycompany_common.medicare_snf_mds_quality_measures sav_common.medicare_snf_mds_quality_measures
mycompany_common.medicare_snf_provider_information sav_common.medicare_snf_provider_information
mycompany_common.medicare_snf_quality_reporting_program_provider_data sav_common.medicare_snf_quality_reporting_program_provider_data
mycompany_common.offices_v3 sav_common.offices_v3
mycompany_common.open_payments_providers_supplementary sav_common.open_payments_providers_supplementary
mycompany_common.provider_per_zip_v6 sav_common.provider_per_zip_v6
mycompany_common.providers_per_team_v1 sav_common.providers_per_team_v1
mycompany_common.tam_predictors_v1 sav_common.tam_predictors_v1
mycompany_common.tam_results_per_provider_all_v2 sav_common.tam_results_per_provider_all_v2
mycompany_common.tam_results_per_provider_latest sav_common.tam_results_per_provider_latest
mycompany_common.tam_territory_components_v1 sav_common.tam_territory_components_v1
mycompany_common.territories_per_zip_v2 sav_common.territories_per_zip_v2
mycompany_common.territories_v2 sav_common.territories_v2
mycompany_common.usa_census_data_20201022 sav_common.usa_census_data_20201022
mycompany_geo.simplemaps_uszips sav_geo.simplemaps_uszips
mycompany_geo.zip sav_geo.zip
但是当运行这样做时,结果是:
sav_common.business_daysays
sav_common.cms_compareare
sav_common.cms_provider_nationalnal
sav_common.gov_cms_data_Medicare-Claims_Reassignment-Sub-File_rta9-bts3ts3
sav_common.gov_cms_data_Medicare-Enrollment_Address-Sub-File_je57-c47h47h
sav_common.gov_cms_data_Medicare-Enrollment_Base-Provider-Enrollment-File_ykfi-ffzqfzq
sav_common.gov_cms_data_Medicare-Enrollment_Secondary-Specialty_n48j-8qtjqtj
sav_common.gov_cms_data_Medicare-Part-D_Medicare-Provider-Utilization-and-Payment-Data-Par_icvy-hpttptt
sav_common.gov_cms_data_Medicare-Physician-Supplier_Medicare-Physician-and-Other-Supplier-National-Pro_5fr6-cch3ch3
sav_common.gov_cms_data_provider-data_dataset_mj5m-pzi6_National_Downloadable_Fileile
sav_common.gov_cms_download_nppes_NPPES_Data_Disseminationion
sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2019-Reporti_qsys-b88w88w
sav_common.gov_cms_openpaymentsdata_dataset_General-Payment-Data-Detailed-Dataset-2020-Reporti_txng-a8vj8vj
sav_common.medicare_provider_utilization_and_payment_part_bt_b
sav_common.medicare_provider_utilization_and_payment_part_dt_d
sav_common.medicare_snf_claims_quality_measuresres
sav_common.medicare_snf_health_deficienciesies
sav_common.medicare_snf_mds_quality_measuresres
sav_common.medicare_snf_provider_informationion
sav_common.medicare_snf_quality_reporting_program_provider_dataata
sav_common.offices_v3_v3
sav_common.open_payments_providers_supplementaryary
sav_common.provider_per_zip_v6_v6
sav_common.providers_per_team_v1_v1
sav_common.tam_predictors_v1_v1
sav_common.tam_results_per_provider_all_v2_v2
sav_common.tam_results_per_provider_latestest
sav_common.tam_territory_components_v1_v1
sav_common.territories_per_zip_v2_v2
sav_common.territories_v2_v2
sav_common.usa_census_data_20201022022
sav_geo.simplemaps_uszipsips
sav_geo.zipzip
即第二个捕获组没有重复,而是将每行的最后 3 个字符附加到每一行...
我尝试了很多变体,但我无法确定我做错了什么。
在此先感谢您的帮助!
您将带有 Windows 行结尾 (CRLF) 的文件传递给期望 unix 行结尾 (LF) 的 Perl 版本。
给定输入
source:project_dbt.common.business_days␍␊
\___________________/|
Removed by -l
程序发出
mycompany_common.business_days␍ sav_common.business_days␍␊
\___________________/ \___________________/|
Added by -l
您的终端显示为
sav_common.business_days_days
\_______________________/\___/
Overwritten From original
将文件转换为 unix 文件(例如使用 dos2unix
)或删除尾随 CR (s/\s+\z//;
)。