簡體   English   中英

如何僅使用sed提取子字符串?

[英]How to extract substring with sed but first occurence only?

按預期,在/string1/string2上使用sed -n "s/.*\\(\\/.*\\/\\).*/\\1/p產生string1。

但是,在/string1/string2/string3上使用相同的/string1/string2/string3會生成string2。

如何僅打印第一個匹配項,即string1。

這正是我想要的:

sed -n "s/[^/]*\\(\\/[az]*\\).*/\\1/p"

您可以使用此sed:

sed -n 's|/\([^/]*\)/.*|\1|p'

通過使用備用定界符,避免轉義/

perl的非貪婪正則表達式量詞很方便:

perl -pe 's{.*?(/.*?/).*}{$1}' <<END
foobar/string1/string2/string3
END
/string1/

如果要使用 bash shell:

str="foobar/string1/string2/string3"
string1=$( IFS=/; set -- $str; echo $2 )

這可能對您有用(GNU sed):

sed -n 's/[^\/]*\(\/[^\/]*\/\).*/\1/p' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM