[英]Extracting Substring from String with Multiple Special Characters Using 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.