英文:
How can I make my regular expression match variables inbetween brackets on single and multiple lines?
问题
我试图匹配从 process.env
中解构的所有环境变量,在我的 TypeScript 项目中。这包括在单行或多行上进行解构。
以下是包含从 process.env
解构的 TS 代码示例,一个在单行上,另一个跨多行:
File1.ts:
const { OKTA_AUDIENCE_DOMAIN, OKTA_DOMAIN = '''', OKTA_WEB_CLIENT_ID, OKTA_ISSUER: issuer = '''', AUTH_TWO: ISSUE_TWO = '''', } = process.env;
File2.ts:
const {
OKTA_AUDIENCE_DOMAIN,
OKTA_DOMAIN = '''',
OKTA_WEB_CLIENT_ID,
OKTA_ISSUER: issuer = '''',
AUTH_TWO: ISSUE_TWO = '''',
} = process.env;
我只能编写一个匹配单行解构变量的脚本。但是,我希望这个脚本可以匹配单行和多行。
这是我目前拥有的脚本:
grep -Ezo '\{[^}]*\} = process.env' File1.ts
如果在 File1
上运行,我将得到以下输出,这是我期望的:
{ AUTH0_AUDIENCE_DOMAIN, AUTH0_DOMAIN = '''', AUTH0_WEB_CLIENT_ID, AUTH0_ISSUER: issuer = '''', AUTH_TWO: ISSUE_TWO = '''', } = process.env
你可以看到这里已经正确地匹配了从 process.env
解构的环境变量。
现在,如果我在 File2.ts
上运行相同的脚本,它将返回空:
grep -Ezo '\{[^}]*\} = process.env' File2.ts
输出为空。
我应该如何修改这个脚本,以便它可以匹配在单行和多行上进行解构的环境变量?
英文:
I am trying to match all environment variables that get de-structured from process.env
in my Typescript project. This includes matching de-structuring on single or multiple lines.
Take the following TS code examples that contains de-structuring from process.env, 1 is on a single line, the other is across multiple lines:
File1.ts:
const { OKTA_AUDIENCE_DOMAIN, OKTA_DOMAIN = '', OKTA_WEB_CLIENT_ID, OKTA_ISSUER: issuer = '', AUTH_TWO: ISSUE_TWO = '', } = process.env;
File2.ts:
const {
OKTA_AUDIENCE_DOMAIN,
OKTA_DOMAIN = '',
OKTA_WEB_CLIENT_ID,
OKTA_ISSUER: issuer = '',
AUTH_TWO: ISSUE_TWO = '',
} = process.env;
I have only been able to write a script that matches the de-strucutred variables on the single line. However, I want the script to match single and multi lines.
This is the script I currently have:
grep -Ezo '\{[^}]*\} = process.env' File1.ts
If ran on File1
, I would get the following output, which is what I expect:
{ AUTH0_AUDIENCE_DOMAIN, AUTH0_DOMAIN = '', AUTH0_WEB_CLIENT_ID, AUTH0_ISSUER: issuer = '', AUTH_TWO: ISSUE_TWO = '', } = process.env
You can see here that it has correctly matched the environment variables being de-structured from process.env
Now if I were to run this same script on File2.ts
, it would return nothing:
grep -Ezo '\{[^}]*\} = process.env' File2.ts
The output is empty.
How can I modify this script such that it matches the environment variables being de-structured on both single and multiple lines?
答案1
得分: 1
尝试这个:
cat File1.ts | tr '\n' ' ' | sed 's/ / /g' | grep -Ezo '{[^}]} = process.env'
cat File2.ts | tr '\n' ' ' | sed 's/ / /g' | grep -Ezo '{[^}]} = process.env'
注意:
- `tr`将换行符更改为空格(如果你在Windows上,将其更改为 `tr '\n\r' ' '`)
- `sed`去除多个空格
- `grep`保留了你的原始参数
英文:
Try this:
cat File1.ts | tr '\n' ' ' | sed 's/ */ /g' | grep -Ezo '\{[^}]*\} = process.env'
cat File2.ts | tr '\n' ' ' | sed 's/ */ /g' | grep -Ezo '\{[^}]*\} = process.env'
Notes:
tr
changes newlines to spaces (change totr '\n\r' ' '
if you are on Windows)sed
gets rid of multiple spacesgrep
has your original parameters
答案2
得分: 0
如果您同意安装ripgrep
rg -oU '\{[^}]*\} = process\.env'
-U
选项启用多行匹配。
话虽如此,对于您提供的示例输入,grep -oz '{[^}]*} = process\.env'
对我来说有效。另外,请注意,使用grep -z
输出将以ASCII NUL字符终止。因此,您需要进一步处理输出,例如通过管道传递给tr '\0' '\n'
。
英文:
If you are okay with installing ripgrep
rg -oU '\{[^}]*\} = process\.env'
The -U
option enables multiline matching.
That said, grep -oz '{[^}]*} = process\.env'
works for me for your given input samples. Also, note that with grep -z
the output will be terminated with ASCII NUL characters. So, you'll need to further process the output, for example pipe to tr '\0' '\n'
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论