Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:提取行的部分并重写它们?_Bash_String Matching - Fatal编程技术网

Bash:提取行的部分并重写它们?

Bash:提取行的部分并重写它们?,bash,string-matching,Bash,String Matching,我有一行(这是更多相同内容列表的一部分)看起来像: au123456.us.something.net/789/net/Wonderful 。。。等等 我想提取auXXXXXX部分中的6位数字,然后再抓取/后面的所有内容,这样我就可以将行重新写入: cdn123456.au.somewhereelse.com/789/net/Wonderful 这可能吗?我对替换要求和正则表达式感到困惑…:facepalm: 我使用的是: echo "au123456.us.something.n

我有一行(这是更多相同内容列表的一部分)看起来像:

au123456.us.something.net/789/net/Wonderful
。。。等等

我想提取
auXXXXXX
部分中的6位数字,然后再抓取
/
后面的所有内容,这样我就可以将行重新写入:

cdn123456.au.somewhereelse.com/789/net/Wonderful
这可能吗?我对替换要求和正则表达式感到困惑…:facepalm:

我使用的是:

echo "au123456.us.something.net/789/net/Wonderful" | sed 's/au/cdn/g;s/us.something.net/au.somewhereelse.com/g'
但是它对于诸如:
au123456.us.something.net/789/net/CaultonHex
之类的实例来说不够健壮。输出变为:


cdn123456.au.somewhere.com/789/net/CcdnltonHex

如果您不想全局匹配,请不要使用
g
标志
g
标志使其替换所有引用,如果没有
g
标志,则仅替换第一个引用

$ printf "%s\n" au123456.us.something.net/789/net/Wonderful au123456.us.something.net/789/net/CaultonHex  | sed 's/au/cdn/; s/us.something.net/au.somewhereelse.com/'
cdn123456.au.somewhereelse.com/789/net/Wonderful
cdn123456.au.somewhereelse.com/789/net/CaultonHex
请注意,在regex
us.something.net
中,点
表示任何字符

$ echo au123456.us%something,net/789/net/Wonderful | sed 's/au/cdn/; s/us.something.net/au.somewhereelse.com/'
cdn123456.au.somewhereelse.com/789/net/Wonderful
使用
\.
对点进行转义以仅匹配一个点:

sed 's/au/cdn/; s/us\.something\.net/au.somewhereelse.com/'
我个人更愿意明确地匹配模式,包括:

$ printf "%s\n" au123456.us.something.net/789/net/Wonderful au123456.us.something.net/789/net/CaultonHex  | sed 's@au\([0-9]\{6\}\)\.us\.something\.net/@cdn\1.au.somewhereelse.com@'
cdn123456.au.somewhereelse.com789/net/Wonderful
cdn123456.au.somewhereelse.com789/net/CaultonHex

因此,如果您不想在全球范围内执行此操作,请删除
g
标志。谢谢。我用了
sed's@au\([0-9]\{6\}\.us\.something\.net/@cdn\1.au.somewhere.com/@'