繁体   English   中英

使用sed从字符串中提取子字符串

[英]Using sed for extracting substring from string

我刚开始使用sed做正则表达式。 我想从*****/XXXXXX>提取XXXXXX ,所以我在关注

sed -n "/^/*/(\S*\).>$/p"

如果这样做,我会收到以下错误

sed:1:“ / ^ / /(\\ S )。> $ / p”:无效的命令代码*

我不确定我在这里想念什么。

尝试:

$ echo '*****/XXXXXX>' | sed 's|.*/||; s|>.*||'
XXXXXX

替代命令s|.*/|| 消除一切到最后/的字符串。 替代命令s|>.*|| 从字符串中的第一个>删除所有内容,直到行的末尾。

要么:

$ echo '*****/XXXXXX>' | sed -E 's|.*/(.*)>|\1|'
XXXXXX

替代命令s|.*/(.*)>|\\1| 捕获last /和last >之间的所有内容,并将其保存在组1中。然后替换为组1 \\1

我认为awk可以更好地完成此任务。 使用-F可以使用多个定界符,例如“ /”和“>”:

echo "*****/XXXXXX>" | awk -F'/|>' '{print $1}'

当然,您可以使用sed ,但要理解起来更加复杂。 首先,我删除第一部分(以“ /”分隔),第二部分之后(以“>”分隔):

echo "*****/XXXXXX>" | sed -e s/.*[/]// -e s/\>//

两者都会带来预期的结果:XXXXXX。

如果有pcre选项,请使用grep

$ echo '*****/XXXXXX>' | grep -oP '/\K[^>]+'
XXXXXX
  • /\\K正向查找/ -不属于输出
  • [^>]+ >以外的字符
echo '*****/XXXXXX>' |sed 's/^.*\/\|>$//g'
XXXXXX

从该行的开头开始,然后进行操作,直到lask / ALSO find >然后是EOL,如果发现其中任何一个,则将其替换为空白。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM