在同一行的其他文本中使用通配符 sed search/remove
Wildcard sed search/remove within other text in the same line
我正在尝试使用 sed 删除带有部分通配符的匹配字符串,但我在该网站上搜索的答案似乎不适用,或者我无法将它们转换为我的情况。
下面是我需要删除的文本字符串:
www.foo.com.cp123.bar.com
它在一个文件中,其他条目在同一行。包含我的条目的行始终以 serveralias: 开头,但是如下所示:
serveralias: www.domain.com mail.domain.com www.foo.com.cp123.bar.com domain.com
我可以通过 'cp123.bar.com' 文本确定我需要删除的内容,因为它始终保持不变。改变的是前面的'www.foo.com'。它可以在一行中只出现一次或多次,但总是以 'cp123.bar.com' 结尾。根据我的研究,我尝试了以下两个命令:
sed 's/\ .*cp123.bar.com\ //g' file.txt
sed 's/\ [^:]+$cp123.bar.com\ //g' file.txt
我使用每个条目之间的 spaces 作为 find/replace(删除)的起点和终点,但这是一个创可贴,并不总是有效,因为我需要删除的条目偶尔位于行尾(之后没有 space)。但是,如果我不包含 spaces,所有内容都会被删除,因为我使用的是通配符,包括 www.domain.com、mail.domain.com 等我需要保留在那里的文本。 运行 上面的任何一个 sed 命令都不做任何事情,只是打印当前文件中的内容。
关于我需要更改的内容有什么想法吗?如果需要,我很乐意澄清任何事情。
Sed 需要一个 -r
标志才能使用增强的正则表达式。没有 -r
,+
将无法在正则表达式中使用。因此,
sed -r 's/ +[^ ]+\.cp123\.bar\.com//g'
会做你想做的。它删除以下子字符串:
- 一个或多个space
- 后跟一个或多个非space
- 接着是
.cp123.bar.com
我正在尝试使用 sed 删除带有部分通配符的匹配字符串,但我在该网站上搜索的答案似乎不适用,或者我无法将它们转换为我的情况。
下面是我需要删除的文本字符串:
www.foo.com.cp123.bar.com
它在一个文件中,其他条目在同一行。包含我的条目的行始终以 serveralias: 开头,但是如下所示:
serveralias: www.domain.com mail.domain.com www.foo.com.cp123.bar.com domain.com
我可以通过 'cp123.bar.com' 文本确定我需要删除的内容,因为它始终保持不变。改变的是前面的'www.foo.com'。它可以在一行中只出现一次或多次,但总是以 'cp123.bar.com' 结尾。根据我的研究,我尝试了以下两个命令:
sed 's/\ .*cp123.bar.com\ //g' file.txt
sed 's/\ [^:]+$cp123.bar.com\ //g' file.txt
我使用每个条目之间的 spaces 作为 find/replace(删除)的起点和终点,但这是一个创可贴,并不总是有效,因为我需要删除的条目偶尔位于行尾(之后没有 space)。但是,如果我不包含 spaces,所有内容都会被删除,因为我使用的是通配符,包括 www.domain.com、mail.domain.com 等我需要保留在那里的文本。 运行 上面的任何一个 sed 命令都不做任何事情,只是打印当前文件中的内容。
关于我需要更改的内容有什么想法吗?如果需要,我很乐意澄清任何事情。
Sed 需要一个 -r
标志才能使用增强的正则表达式。没有 -r
,+
将无法在正则表达式中使用。因此,
sed -r 's/ +[^ ]+\.cp123\.bar\.com//g'
会做你想做的。它删除以下子字符串:
- 一个或多个space
- 后跟一个或多个非space
- 接着是
.cp123.bar.com