相关疑难解决方法(0)

如何从字符串中删除/剥离双引号或单引号?

我有一个文件,其中包含一些类似这样的行:

ENVIRONMENT="myenv"
ENV_DOMAIN='mydomain.net'
LOGIN_KEY=mykey.pem
Run Code Online (Sandbox Code Playgroud)

我想提取后面的部分,=但不带周围的引号。我尝试过gsub这样的:

awk -F= '!/^(#|$)/ && /^ENVIRONMENT=/ {gsub(/"|'/, "", $2); print $2}' 
Run Code Online (Sandbox Code Playgroud)

最终会出现-bash: syntax error near unexpected token ')'错误。它适用于单一匹配:/"/或,/'/但当我尝试匹配其中任何一个时,它不起作用。我究竟做错了什么?

regex bash awk

2
推荐指数
1
解决办法
6658
查看次数

如何在git配置别名内的bash片段内的命令替换内使用括号字符?

这是我正在编辑的配置的摘录。这是在[alias]my的部分内.gitconfig

ignored = !git ls-files -v | grep "^S"
status-with-ignored = "!f() { git status; ignored=$(git ignored | cut -d ' ' -f 2 | sed -e s/^/z/ -e s/$/z/); [ -n \"$ignored\" ] && echo \"git skip-worktree (ignored):\n$ignored\"; };f"
Run Code Online (Sandbox Code Playgroud)

我基本上是在尝试将 的输出着色,git ignored因为我将其粘贴到 git status 的末尾。我上面显示的工作正常,但fatal: bad config file line 18 in ~/.gitconfig如果我的sed命令中有任何括号(这对于构建正则表达式非常有用),则它不起作用 ( )。

例如,我希望能够写一些带有括号的东西,例如sed s/^(.*)$/z\1z/代替sed -e s/^/z/ -e s/$/z/.

因为我上色的东西,我实际上是使用\x1b[31m\x1b[m等等,但你的想法。 …

git bash

2
推荐指数
1
解决办法
1237
查看次数

在单引号内转义双引号内的单引号

我发出一个 curl 命令,理想情况下看起来像这样(请注意,由于缺乏转义,这是不正确的):

curl -X POST --data-urlencode 'payload={"channel": "@somebody", "text": "I'm sending you a test message. Let me know if you get it."}' https://hooks.slack.com/services/XXX
Run Code Online (Sandbox Code Playgroud)

我是单词中的单引号导致此失败。但是,我不确定如何转义此引用,因为有多个级别的嵌套引用。

作为第二个问题,如果文本字符串中有双引号怎么办?那些人怎么可能逃脱?

我已经阅读了有关转义的内容并查看了其他 SO 帖子(包括如何在单引号字符串中转义单引号?),但我似乎无法找到任何可行的解决方案。链接的帖子讨论了单引号中的单引号,并通过使用双引号解决了这个问题。但是,我的单引号已经是双引号了。所以这个比较复杂。

非常感谢你的帮助。

bash quoting

2
推荐指数
2
解决办法
5553
查看次数

sed删除字母和'

我正在使用此sed命令剥离所有(对我而言)不必要字符的文档。

sed 's/[^a-zA-Z]/ /g'
Run Code Online (Sandbox Code Playgroud)

但是,在挖掘了一些数据之后,我意识到了一个非常基本的错误:不包括'将我don't的所有s都切成don ts,这很烂。

所以我想'在我的正则表达式中包含它。如果我可以这样称呼我,我仍然对这种“编码”还是陌生的,所以请原谅我的新手错误甚至更好,请向我解释!

sed 's/[^a-zA-Z']/ /g' 这显然不起作用

sed 's/[^a-zA-Z\']/ /g' 但这也不是,我以为可以\逃脱'

bash sed

1
推荐指数
1
解决办法
4859
查看次数

如何grep单引号之间的所有内容?

我无法弄清楚如何 grep 两个单引号之间的字符。

我有这个文件 version: '8.x-1.0-alpha1'

我喜欢这样的输出(版本号可以不同):

8.x-1.0-alpha1

我写了以下但它不起作用:

cat myfile.txt | grep -e 'version' | sed 's/.*\?'\(.*?\)'.*//g'

感谢您的帮助。

另外:我使用了 sed 命令,sed -n "s#version:\s*'\(.*\)'#\1#p" 我也喜欢删除我编辑为 .x 的 8.x- sed -n "s#version:\s*'8.x-\(.*\)'#\1#p"

此命令仅适用于 linux,不适用于 MAC。如何更改此命令以使其在 MAC 上工作?

sed -n "s#version:\s*'8.x-\(.*\)'#\1#p"

bash grep sed

1
推荐指数
2
解决办法
3322
查看次数

在bash中用单引号引起来的单引号转义

问题

我正在尝试自动创建一个kickstart文件,而我用来解析该文件的工具需要将kickstart作为字符串提供在单引号中。

除了使用awk的postinstall脚本(因此在单引号内包含单引号)之外,大多数方法都很好。

我查看了其他一些帖子,并尝试转义字符串,但无济于事。

我显然误解了转义的一些基本原理。

代码

DATA='
GATEWAY=$(localcli network ip route ipv4 list | grep default | awk \'{print $3}\')
'
echo ${DATA}
Run Code Online (Sandbox Code Playgroud)

所需的输出

这是我想看到的文字输出字符串。

GATEWAY=$(localcli network ip route ipv4 list | grep default | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激!

谢谢

马特

bash shell

0
推荐指数
1
解决办法
1512
查看次数

在 shell 脚本中转义单引号

我需要转义变量中的单引号。

ssh_command 'file=$(hostname)_server-setup_$(date +%Y-%m-%d).tar.gz && cd /var && tar -zcvf $file ini | wc -l | xargs printf \'Num files: %d, File: $file\''
Run Code Online (Sandbox Code Playgroud)

我可以用双引号将变量引起来,但是当声明变量时将评估内部变量,而这不是我想要的。

ssh_command "file=$(hostname)_server-setup_$(date +%Y-%m-%d).tar.gz && cd /var && tar -zcvf $file ini | wc -l | xargs printf 'Num files: %d, File: $file'"
Run Code Online (Sandbox Code Playgroud)

更新

我现在想出了这个,但然后$file只是打印为$file

ssh_command (){
    ssh root@host $1
}

ssh_command 'file=$(hostname)_server-setup_$(date +%Y-%m-%d).tar.gz && cd /var && tar -zcvf $file ini | wc -l | xargs printf '"'"'Num files: %d, File: $file'"'"
Run Code Online (Sandbox Code Playgroud)

输出 …

linux bash shell

0
推荐指数
1
解决办法
1816
查看次数

标签 统计

bash ×7

sed ×2

shell ×2

awk ×1

git ×1

grep ×1

linux ×1

quoting ×1

regex ×1