2012-03-30 15 views
1

shの文字列から既知の部分文字列を切り取る方法は? たとえば、私は文字列"http://www.myserver.org/very/very/long/path/mystring" の式"http://www.myserver.org/very/very/long/path/"が知られています。どうすれば "ミストリング"を得ることができますか?既知の部分文字列shを切り捨てる

ありがとうございました。

答えて

3

など。 perlを使用して:

echo "http://www.myserver.org/very/very/long/path/mystring" | perl -pe 's|^http://www.myserver.org/very/very/long/path/(.*)$|\1|' 

などの。 sedを使用:

echo "http://www.myserver.org/very/very/long/path/mystring" | sed 's|^http://www.myserver.org/very/very/long/path/\(.*\)$|\1|' 

などの。検索文字列が変数に格納されている場合、ここではvariableという名前になります。変数を展開するには、二重引用符を使用します。 man dash

S is the variable-name 
## remove largest prefix pattern 
*/ upto the last slash 

がさらに読書のために、検索/ binの下でテスト

echo "http://www.myserver.org/very/very/long/path/mystring" | sed "s|^${variable}\(.*\)$|\1|" 
+0

私はsedに行ってしまいましたが、原則が適用されます... – brice

+0

良い点は、sedスニペットも追加されました。 – simonnordberg

+0

式の前後に二重引用符を使用すると、変数が展開されます。例えば。 'sed" s |^$ {shorturl} \(。* \)$ | \ 1 | "'のようになります。答えも更新されました。 – simonnordberg

1

/dash

$ S="http://www.myserver.org/very/very/long/path/mystring" && echo ${S##*/} 
mystring 

"##" いくつかのより多くのイラスト:

$ S="/mystring/" ; echo ${S##*/} 

$ S="/mystring" ; echo ${S##*/} 
mystring 
$ S="mystring" ; echo ${S##*/} 
mystring 
関連する問題