[英]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.