2016-09-23 157 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