特定URL字符串操作的bash脚本
我需要操纵一个我不知道长度的字符串(URL) 这根绳子有点像 我基本上需要一个正则表达式,它返回: 其中,x是当前ip,每次都可能变化,我不知道DontCare的数量 实际上我不知道怎么做,我花了2个小时研究这个问题,但没有找到解决办法特定URL字符串操作的bash脚本,bash,Bash,我需要操纵一个我不知道长度的字符串(URL) 这根绳子有点像 我基本上需要一个正则表达式,它返回: 其中,x是当前ip,每次都可能变化,我不知道DontCare的数量 实际上我不知道怎么做,我花了2个小时研究这个问题,但没有找到解决办法 谢谢 您可以按如下方式使用sed: sed -E 's=(https://[^/]*).*(/keyword/.*)=\1\2=' s代表替换,其形式为s=搜索模式=替换模式= 搜索模式是一个正则表达式,我们在其中对要提取的部分进行分组。 替换模式使用\1
谢谢 您可以按如下方式使用
sed
:
sed -E 's=(https://[^/]*).*(/keyword/.*)=\1\2='
s
代表替换,其形式为s=
搜索模式=
替换模式=
搜索模式是一个正则表达式,我们在其中对要提取的部分进行分组。
替换模式使用
\1
和\2
访问这些组
您可以将文件或stdin馈送到sed
,它将逐行处理输入。如果您有一个字符串变量并使用
bash
、zsh
或类似的东西,您也可以使用echo将该变量直接输入stdinhttps://x.xx.xxx.xxx/dontcare1/dontcare2/dontcareN/keyword/restofstring“| sed”s/dontcare[0-9]\+\///g”
用于操纵文本dontcare[0-9]\+\///g
是正则表达式dontcare[0-9]+///code>的转义形式,它匹配单词“dontcare”,后跟1个或多个数字,后跟///code>字符
sed的模式是这样工作的:s/find/replace/g
,其中g是一个允许您匹配多个模式实例的命令
您可以看到正则表达式正在运行
请注意,这假设字符串的其余部分中没有dontcareN
s。如果是这种情况,那么,'s的答案会更好。您还可以使用read
和/
值作为$IFS
来解析垃圾
$: IFS=/ read proto trash url trash trash trash keyword rest <<< "https://x.xx.xxx.xxx/dontcare1/dontcare2/dontcareN/keyword/restofstring"
$: echo "$proto//$url/$keyword/$rest"
https://x.xx.xxx.xxx/keyword/restofstring
$:IFS=/read proto-trash url trash关键字rest这里有一个sed
变体,它从路径中选择主机部件和最后两个组件
url='http://example.com:1234/ick/poo/bar/quux/fnord'
newurl=$(echo "$url" | sed 's%\(https*://[^/?]*[^?/]\)[^ <>'"'"'"]*/\([^/ <>'"''"]*/^/ <>'"''"]*\)%\1\2%')
url='1〕http://example.com:1234/ick/poo/bar/quux/fnord'
新url=$(回显“$url”| sed's%\(https*://[^/?]*[^?/]\)[^'''''''''''''']*/\([^/'''''''''']*/''''''']*\)%\1\2%)
一般形式是sed的%pattern%replacement%
,其中模式通过主机名部分的结尾匹配(捕获到一组反斜杠括号中)然后跳过倒数第二个斜杠,然后捕获URL的其余部分,包括最后一个斜杠;替换者只需调用两个捕获的组,而不包含它们之间的跳过部分。很好,您正在努力解决自己的问题,因此我们鼓励所有成员在其帖子中添加他们的努力,非常感谢请这样做,然后让我们知道。这里有很多答案。如果其中一个解决了您的问题,您应该接受。如果您的问题没有解决,请编辑您的问题并指出原因。这是正确的,但我们用任何字符串替换dontcare
都应该有效。对于\+
,我必须在本地转义,以便命令正确工作根据我的理解,它可能被解释为一个算术运算符,但它也清楚地表明它应该在这里起作用:啊,我明白了。我没有想到sed
和sed-E
之间的区别。因为sed-E
\+
是一个文字,但对于sed
它是一个量词。然而,“用任何字符串替换dontcare
“可能比看起来要难一些。我猜OP希望匹配的不是关键字
而不是dontcare
,因此您必须反转regex/keyword/
,这在sed
中并不容易。啊!我明白你的意思。那么,我不确定OP在这里解释的方法是什么。如果目的是针对/keyword/
的位置,那么你的答案是正确的(我的答案不是),但是如果目的是找到/dontcareN/
,那么我的答案应该是正确的。这个问题的形式没有清楚地解释它的意图,至少对我来说是这样。
url='http://example.com:1234/ick/poo/bar/quux/fnord'
newurl=$(echo "$url" | sed 's%\(https*://[^/?]*[^?/]\)[^ <>'"'"'"]*/\([^/ <>'"''"]*/^/ <>'"''"]*\)%\1\2%')