使用正则表达式查找文件中行开头的单词

Using Regex to get a find a word at the beginning of a line in a file

本文关键字:开头 单词 文件 正则表达式 查找      更新时间:2023-09-26

我需要做的是找到sql脚本文件中每行开头出现的单词"prompt"。例如,在这些sql脚本中,我们将在每行开头出现1到多次"prompt"这个词。我需要拉这些"提示"字与正则表达式,但没有拉字"提示"从其他地方它可能发生在sql脚本。谢谢你的帮助

下面是一个脚本的示例:

SET SERVEROUTPUT ON FORMAT WORD_WRAPPED
CL SCR
undef database_service
SET trimspool ON
set linesize 1000
COLUMN LATEST_PROCESS_DATE NEW_VALUE LATEST_DATE
SELECT to_char(SYSDATE, 'yyyymmddhh24miss') LATEST_PROCESS_DATE FROM dual;
spool ..'log'R_AssetMgmtITDB_EntitlementTestPrompt_Oracle_1.0_&latest_date..lst
prompt
prompt LOGIN TO entitlement(DB => toolit - IT, tooluat - PCU, toolprd - PROD)
prompt
conn entitlement@&&database_service
show user
prompt database_name IS &&database_service
prompt
@schema'DML'insert_amportal_entitlements_entitlementTestPrompt.sql
undef database_service
undef userid
undef response
prompt end of R_AssetMgmtITDB_EntitlementTestPrompt_Oracle_1.0

"'nprompt "也可以使用

您可以在多行模式下使用正则表达式/^prompt'b/i,也可以在新行上分割字符串:

拆分字符串可以得到该单词出现的行号:

var string = "SET SERVEROUTPUT ON FORMAT WORD_WRAPPED'nCL SCR'nundef database_service'nSET trimspool ON'nset linesize 1000'nCOLUMN LATEST_PROCESS_DATE NEW_VALUE LATEST_DATE'nSELECT to_char(SYSDATE, 'yyyymmddhh24miss') LATEST_PROCESS_DATE FROM dual;'nspool ..'log'R_AssetMgmtITDB_EntitlementTestPrompt_Oracle_1.0_&latest_date..lst'nprompt'nprompt LOGIN TO entitlement(DB => toolit - IT, tooluat - PCU, toolprd - PROD)'nprompt'nconn entitlement@&&database_service'nshow user'nprompt database_name IS &&database_service'nprompt'n@schema'DML'insert_amportal_entitlements_entitlementTestPrompt.sql'nundef database_service'nundef userid'nundef response'nprompt end of R_AssetMgmtITDB_EntitlementTestPrompt_Oracle_1.0";
var answer =
  string.split(''n')
        .map(function(v, i) { return { lineNumber: i, value: v }; })
        .filter(function(v) { return /^prompt'b/i.test(v.value); });
document.getElementById("out").innerHTML = JSON.stringify( answer );
<p id="out"></p>

仅使用正则表达式也可以为您提供匹配:

var string = "SET SERVEROUTPUT ON FORMAT WORD_WRAPPED'nCL SCR'nundef database_service'nSET trimspool ON'nset linesize 1000'nCOLUMN LATEST_PROCESS_DATE NEW_VALUE LATEST_DATE'nSELECT to_char(SYSDATE, 'yyyymmddhh24miss') LATEST_PROCESS_DATE FROM dual;'nspool ..'log'R_AssetMgmtITDB_EntitlementTestPrompt_Oracle_1.0_&latest_date..lst'nprompt'nprompt LOGIN TO entitlement(DB => toolit - IT, tooluat - PCU, toolprd - PROD)'nprompt'nconn entitlement@&&database_service'nshow user'nprompt database_name IS &&database_service'nprompt'n@schema'DML'insert_amportal_entitlements_entitlementTestPrompt.sql'nundef database_service'nundef userid'nundef response'nprompt end of R_AssetMgmtITDB_EntitlementTestPrompt_Oracle_1.0";
var re     = /^prompt'b/gim;
var answer = string.match( re );
document.getElementById( "out" ).innerHTML = JSON.stringify( answer );
<p id="out"/>