gpt4 book ai didi

sed - 在 sed 命令和范围地址中使用不同的分隔符

转载 作者:行者123 更新时间:2023-12-03 08:37:55 25 4
gpt4 key购买 nike

我在 shell 脚本中使用 sed 来编辑文件系统路径名。假设我想替换

/foo/bar
/baz/qux
但是,sed 的 s///命令使用正斜杠 /作为分隔符。如果我这样做,我会看到一条错误消息,例如:
▶ sed 's//foo/bar//baz/qux//' FILE
sed: 1: "s//foo/bar//baz/qux//": bad flag in substitute command: 'b'
同样,有时我想选择行范围,例如模式之间的行 foo/barbaz/qux .同样,我不能这样做:
▶ sed '/foo/bar/,/baz/qux/d' FILE
sed: 1: "/foo/bar/,/baz/qux/d": undefined label 'ar/,/baz/qux/d'
我能做什么?

最佳答案

您可以通过反斜杠使用替代正则表达式分隔符作为搜索模式:

sed '\,some/path,d'

只需将它用于 s命令:
sed 's,some/path,other/path,'

不过,您可能想要保护其他元字符;这是使用 Perl 和 quotemeta 的好地方,或其他脚本语言中的等价物。

来自 man sed :

/regexp/
Match lines matching the regular expression regexp.

\cregexpc
Match lines matching the regular expression regexp. The c may be any character other than backslash or newline.

s/regular expression/replacement/flags
Substitute the replacement string for the first instance of the regular expression in the pattern space. Any character other than backslash or newline can be used instead of a slash to delimit the RE and the replacement. Within the RE and the replacement, the RE delimiter itself can be used as a literal character if it is preceded by a backslash.

关于sed - 在 sed 命令和范围地址中使用不同的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com