2016-09-23 155 views
1

我刚开始使用sed执行正则表达式。我想提取*****/XXXXXX>XXXXXX所以我下面使用sed从字符串中提取子字符串

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

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

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

我不知道我在这里错过了什么。

回答

1

尝试:

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

替换命令s|.*/||消除一切到字符串中的最后/。替代命令s|>.*||将删除保留在该行末尾的字符串中的第一个>的所有内容。

或者:

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

替换命令s|.*/(.*)>|\1|捕捉无论是最后/,最后>之间和组1,然后与第1组,\1替代保存它。

0

grep,如果你有pcre选项

$ echo '*****/XXXXXX>' | grep -oP '/\K[^>]+' 
XXXXXX 
  • /\K正回顾后/ - 不是输出的一部分
  • [^>]+>
1

其他角色在我看来AWK执行BETT呃这个任务。使用-F您可以使用多个分隔符如“/”和“>”:

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

当然,你可以使用sed的,但它更复杂,难以理解。首先,我除去第一部分(由“/”分隔),并在第二个之后(由“>”分隔):

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

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

0
echo '*****/XXXXXX>' |sed 's/^.*\/\|>$//g' 
XXXXXX 

开始从行开始,然后继续,直到拉斯克/也觉得>其次是EOL,如果有的话,这些发现然后用空白代替。

0

使用bash-string-manipulation

$ myString="*****/XXXXXX>"  # Initialize the string 
$ myString="${myString##*/}"  # Extracting the part of string after last '/' 
$ echo "${myString//>}"   # Removing the '>' from the string 
XXXXXX