这是我的字符串:
'ls\r\n\x1b[00m\x1b[01;31mexamplefile.zip\x1b[00m\r\n\x1b[01;31m'
Run Code Online (Sandbox Code Playgroud)
我正在使用代码从SSH命令检索输出,我希望我的字符串只包含'examplefile.zip'
我可以用什么来删除额外的转义序列?
我需要将一个字符串传递给程序作为Bash CLI中的参数,例如
program "don't do this"
Run Code Online (Sandbox Code Playgroud)
该字符串可能包含任何字符,如'$','\'等等,我不希望Bash做任何修改.所以我考虑使用单引号.
但是以下不起作用:
program 'don\'t do this' //escape doesn't work in single quote
Run Code Online (Sandbox Code Playgroud)
虽然以下两个工作:
program $'dont\'t do this' //seems fine, but any other side effects?
program 'dont'\''do this' //breaking into 3 parts
Run Code Online (Sandbox Code Playgroud)
第一种方法似乎更好,因为它获得前修改以下(把美元符号在前面,并替换每\到\\),但我不知道还有什么美元符号可能会做.
我真的用谷歌搜索了这个,但我找不到我需要的东西......
我正在尝试获取仅包含 gitlab 运行者姓名的列表。
所以输出gitlab-runner list 2>&1是:
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
default_runner Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230
Run Code Online (Sandbox Code Playgroud)
请注意,跑步者的姓名中可以包含空格。
所以我尝试了以下方法:
gitlab-runner list 2>&1 | awk -F'Executor' '{if(NR>1)print $1}'这给了我几乎我想要的东西(除了我需要删除的尾随空格)。
default_runner
test runner
Run Code Online (Sandbox Code Playgroud)
但是,如果我将字段分隔符更改为Executor=希望使其更加明确,则它不再起作用。它返回整行。
$ gitlab-runner list 2>&1 | awk -F'Executor=' '{if(NR>1)print $1}'
default_runner Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230
Run Code Online (Sandbox Code Playgroud)
我尝试过逃避它,但Executor\=没有成功。如何在分割中包含等号?
编辑:
如果我取其中一行并将其回显到 awk 中,它就会起作用
$ echo "test runner Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230" | awk -F'Executor=' '{print $1}'
test runner
Run Code Online (Sandbox Code Playgroud)
另一件需要注意的事情是,无论出于何种原因,gitlab-runner list …