我剛開始使用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