我刚开始使用sed做正则表达式。我想从XXXXXX
中提取*****/XXXXXX>
所以我正在关注
sed -n "/^/*/(\S*\).>$/p"
如果我这样做,我会收到以下错误
sed:1:" / ^ / /(\ S )。> $ / p":无效的命令代码*
我不确定我在这里失踪了什么。
答案 0 :(得分:1)
尝试:
$ echo '*****/XXXXXX>' | sed 's|.*/||; s|>.*||'
XXXXXX
替换命令s|.*/||
会删除字符串中最后一个/
的所有内容。替换命令s|>.*||
将从保留的字符串中的第一个>
中删除所有内容。
或者:
$ echo '*****/XXXXXX>' | sed -E 's|.*/(.*)>|\1|'
XXXXXX
替换命令s|.*/(.*)>|\1|
捕获最后/
和最后>
之间的任何内容,并将其保存在第1组中。然后将其替换为第1组,\1
答案 1 :(得分:1)
在我看来, awk 可以更好地执行此任务。使用-F可以使用多个分隔符,例如“/”和“>”:
echo "*****/XXXXXX>" | awk -F'/|>' '{print $1}'
当然你可以使用 sed ,但理解起来会更复杂。首先我删除第一部分(由“/”分隔)和第二部分(由“>”分隔):
echo "*****/XXXXXX>" | sed -e s/.*[/]// -e s/\>//
两者都会带来预期的结果:XXXXXX。
答案 2 :(得分:0)
grep
选项,请使用pcre
$ echo '*****/XXXXXX>' | grep -oP '/\K[^>]+'
XXXXXX
/\K
正面看待/
- 不属于输出[^>]+
>
答案 3 :(得分:0)
echo '*****/XXXXXX>' |sed 's/^.*\/\|>$//g'
XXXXXX
从该行的开头开始,然后继续直到la /
还找到>
后跟EOL,如果发现其中任何一个,则将其替换为空白。