我正在尝试理解这个sed正则表达式。
sed 's/.*\(ADDR=[^|]*\) |.*/\1/'
如果我没错,以上内容将在一行中的任何地方搜索模式ADDR=<something>
用第一组替换它。我在这里没有得到 [^ |] 的含义。谢谢你的帮助。
答案 0 :(得分:2)
[^...]
匹配班级中没有的任何单个字符。
|
垂直条分隔两个或更多选项。如果满足任何替代方案,则匹配发生。例如,gray|grey
匹配gray
和grey
。
[^|]
匹配|
以外的任何内容。字符类中的^
否定了字符类,而|
在使用sed
时失去了它的实际意义。
答案 1 :(得分:2)
\(ADDR=[^|]*\) |.*/\1/
这里
[^|]
匹配|
以外的任何内容,量词*
量化零次或多次出现。字符类中的^
否定了字符类。
|
匹配字符|
注意在sed
元字符中,例如|
(
)
等将失去意义,因此|
不是替代但是匹配|
个字符。如果你想这样处理元字符,那么-r
(扩展正则表达式)将这样做(使用GNU sed
;使用-E
和BSD sed
)。或者逃避\|
。
示例:强>
$ echo "hello ADDR= hello | world " | sed 's/.*\(ADDR=[^|]*\) |.*/\1/'
ADDR= hello
此(ADDR=[^|]*\)
来自ADDR= hello
的{{1}}匹配,其中包含|
以外的任何内容。