64H*_*4Hz 1 sed regular-expression text-formatting
我目前正在使用这个 one-liner 来获取docker-compose
.
curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | grep "tag_name" | sed -E 's/.*"([^"]+)".*/\1/'
这不是我的代码。我复制并粘贴了它,它奏效了,我想了解更多。具体来说,我对sed
命令很感兴趣。谁能帮助我更好地理解它?
sed -E 's/.*"([^"]+)".*/\1/'
基本上我不理解任何字符串。我单独知道这些项目(.*
= 任何一个或多个字符,[^"]
= 接受任何不是"
)。但是当它以这种方式编写时,我不确定它是如何工作的。
没有sed
命令的命令输出:"tag_name": "1.22.0",
使用sed
命令输出命令:1.22.0
sed -E 's/.*"([^"]+)".*/\1/
-E
:sed
将使用扩展正则表达式/
:将使用的模式和替换的分隔符。 .*"([^"]+)".*
:我所知道的解释正则表达式的最好方法是图表:/
: 正则表达式和替换之间的分隔符\1
:用组号 1 替换原来的行:1.22.0
在这种情况下。 /
: 最后一个没有选项的分隔符,所以它只会在一行中替换一次。希望这解释得足够好。
小智 5
我不知道你对sed
.\xc2\xa0\n了解多少。在 sed(1) 中你可能会发现:
\n\nsed - 用于过滤和转换文本的流编辑器
\n
和:
\n\n\n
-E
,-r
,--regexp-extended
\n
\n在脚本中使用扩展正则表达式\n(为了可移植性,使用 POSIX
-E
)。
你sed
可以定义,让我说,括号之间的单词模式\n你可以用(反斜杠)替换\n它们,\\
后跟一位数字。\xc2\xa0\n在你的问题中,让我写如下:
echo \'"tag_name": "1.22.0"\' | sed -E \'s/"([a-z]+\\_[a-z]+)": "([0-9\\.]+)"/\\2/\'\n
Run Code Online (Sandbox Code Playgroud)\n-E
使用扩展正则表达式\'s/Part1/Part2/
主要结构"
正则表达式模式开头为"
([a-z]+\\_[a-z]+)
第一个单词模式包含两个字符部分_
": "
之后这些序列符号就会出现([0-9\\.]+)
第二个单词模式包含一个或多个\n数字.
"
模式以其结束。\\2
现在你调用第二个单词模式 归档时间: |
|
查看次数: |
8366 次 |
最近记录: |