提取两个符号之间的字符串

时间:2021-04-12 11:12:59

标签: unix sed

我正在寻找一种方法来提取以下示例中“/”和“_”之间的字符串。我试过这个命令,但它不适用于特殊字符:sed -e 's//(.*\)_/\1/'

input:

Sometext/CPCT02010547T_sometext

出:

CPCT02010547T

1 个答案:

答案 0 :(得分:1)

你可以使用

sed -n 's/.*\/\(.*\)_.*/\1/p'
sed -En 's~.*/([^_]*)_.*~\1~p'

-n 选项禁止默认行输出,p 打印替换结果。

第一个模式是 POSIX BRE 正则表达式:

  • .* - 匹配任何文本
  • \/ - 匹配一个 /
  • \(.*\) - POSIX BRE(第一)模式中的捕获组 (\1)
  • _ - _ 字符
  • .* - 字符串的其余部分。

第二个正则表达式是 POSIX ERE 正则表达式(注意 -E 选项),~ 用作正则表达式分隔符以避免转义 /。第一个和第二个之间唯一的大区别是捕获组模式,([^_]*) 匹配除 _ 之外的任何零个或多个字符。