簡體   English   中英

如何在unix中的特定字符后剪切字符串

[英]How to cut a string after a specific character in unix

所以我有這個字符串:

$var=server@10.200.200.20:/home/some/directory/file

我只想提取目錄地址,這意味着我只需要在“:”字符后面的位並得到:

/home/some/directory/file

謝謝。

我需要一個通用命令,因此cut命令不會工作,因為$ var變量沒有固定的長度。

使用sed:

$ var=server@10.200.200.20:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file

這可能對你有用:

echo ${var#*:}

參見例10-10。 參數替換中的模式匹配

為了完整性,使用切割

cut -d : -f 2 <<< $var

並且只使用bash:

IFS=: read a b <<< $var ; echo $b

這也可以。

echo $var | cut -f2 -d":"

這應該做的伎倆:

$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file

你沒有說你正在使用哪個shell。 如果它是POSIX兼容的,如Bash,那么參數擴展可以做你想要的:

參數擴展

...

${parameter#word}

刪除最小的前綴模式。
這個word被擴展為產生一種模式。 然后參數擴展產生parameter ,前綴的最小部分與刪除的模式匹配。

換句話說,你可以寫

$var="${var#*:}"

這將刪除任何匹配*:$var (即一切直到並包括第一: )。 如果你想匹配最后一個: ,那么你可以使用##代替#

這是假設要刪除的部分不包含:對於IPv4地址,但對於IPv6地址不是)

awk -F: '{print $2}' <<< $var

暫無
暫無

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

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