我刚开始使用sed执行正则表达式。我想提取*****/XXXXXX>
XXXXXX
所以我下面使用sed从字符串中提取子字符串
sed -n "/^/*/(\S*\).>$/p"
如果我这样做,我得到以下错误
的sed:1:“/ ^//(\ S)> $/p“:无效的命令代码*
我不知道我在这里错过了什么。
我刚开始使用sed执行正则表达式。我想提取*****/XXXXXX>
XXXXXX
所以我下面使用sed从字符串中提取子字符串
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|
捕捉无论是最后/
,最后>
之间和组1,然后与第1组,\1
替代保存它。
与grep
,如果你有pcre
选项
$ echo '*****/XXXXXX>' | grep -oP '/\K[^>]+'
XXXXXX
/\K
正回顾后/
- 不是输出的一部分[^>]+
比>
其他角色在我看来AWK执行BETT呃这个任务。使用-F您可以使用多个分隔符如“/”和“>”:
echo "*****/XXXXXX>" | awk -F'/|>' '{print $1}'
当然,你可以使用sed的,但它更复杂,难以理解。首先,我除去第一部分(由“/”分隔),并在第二个之后(由“>”分隔):
echo "*****/XXXXXX>" | sed -e s/.*[/]// -e s/\>//
两者都将带来预期的结果:XXXXXX。
echo '*****/XXXXXX>' |sed 's/^.*\/\|>$//g'
XXXXXX
开始从行开始,然后继续,直到拉斯克/
也觉得>
其次是EOL,如果有的话,这些发现然后用空白代替。
$ myString="*****/XXXXXX>" # Initialize the string
$ myString="${myString##*/}" # Extracting the part of string after last '/'
$ echo "${myString//>}" # Removing the '>' from the string
XXXXXX