我正在寻找一种方法来提取以下示例中“/”和“_”之间的字符串。我试过这个命令,但它不适用于特殊字符:sed -e 's//(.*\)_/\1/'
input:
Sometext/CPCT02010547T_sometext
出:
CPCT02010547T
答案 0 :(得分:1)
你可以使用
sed -n 's/.*\/\(.*\)_.*/\1/p'
sed -En 's~.*/([^_]*)_.*~\1~p'
-n
选项禁止默认行输出,p
打印替换结果。
第一个模式是 POSIX BRE 正则表达式:
.*
- 匹配任何文本\/
- 匹配一个 /
\(.*\)
- POSIX BRE(第一)模式中的捕获组 (\1
)_
- _
字符.*
- 字符串的其余部分。第二个正则表达式是 POSIX ERE 正则表达式(注意 -E
选项),~
用作正则表达式分隔符以避免转义 /
。第一个和第二个之间唯一的大区别是捕获组模式,([^_]*)
匹配除 _
之外的任何零个或多个字符。