我有一个文件,其中包含一些类似这样的行:
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 ')'错误。它适用于单一匹配:/"/或,/'/但当我尝试匹配其中任何一个时,它不起作用。我究竟做错了什么?
这是我正在编辑的配置的摘录。这是在[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等等,但你的想法。 …
我发出一个 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 帖子(包括如何在单引号字符串中转义单引号?),但我似乎无法找到任何可行的解决方案。链接的帖子讨论了单引号中的单引号,并通过使用双引号解决了这个问题。但是,我的单引号已经是双引号了。所以这个比较复杂。
非常感谢你的帮助。
我正在使用此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' 但这也不是,我以为可以\逃脱'?
我无法弄清楚如何 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"
问题
我正在尝试自动创建一个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)
任何帮助将非常感激!
谢谢
马特
我需要转义变量中的单引号。
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)