2011-07-27 9 views
3

私はPerlで正規表現を使っても構いませんが、前にBASHで行う必要はありません。BASHの正規表現ですか?

私はそれについていくつかの種類のチュートリアルのためにGoogleに試みましたが、本当に良いものはまだPerlと同じように見えませんでした。私が達成しようとしています何

$filenameと呼ばれる変数のうち、/home/devtestdocs/devtestdocs-repo/を除去し、誰もがはるかに高く評価されるだろうか良いリンクがある場合は理にかなっていると$testdocsdirurl

うまくいけば、と呼ばれる別の変数に置き換えることです。

もう1つの方法は、誰かがbashで検索と置換を行うように書かれた関数が既に存在する場合です。

+0

ここでは正規表現の必要はありません。なぜあなたはそれらが必要だと思うか説明できますか? – hop

答えて

3

sedは、Unixでの文字列操作のための選択の代表的な武器である。また、

echo $filename | sed s/\\/home\\/devtestdocs\\/devtestdocs-repo\\//$testdocsdirurl/ 

、ホップが示唆するように、あなたが道を脱出避けるために@構文を使用することができます。

echo $filename | sed [email protected]/home/devtestdocs/devtestdocs-repo/@[email protected] 
+0

例を助けてくれてありがとう – martincarlin87

+2

sedは通例パス内のスラッシュをエスケープする必要がないので、s @ pattern @ string @をよく理解しています。 – hop

+0

@hop:ありがとう、その構文を知らなかった。 –

3

あなたは正規表現なしでこれを達成することができます:

somepath="/foo/bar/baz" 
newprefix="/alpha/beta/" 
newpath="$newprefix${somepath##/foo/bar/}" 
0

なぜですかこのために正規表現が必要ですか?

これらは単にいくつかの可能性あり:

$ filename=/home/devtestdocs/devtestdocs-repo/foo.txt 
$ echo ${filename/'/home/devtestdocs/devtestdocs-repo/'/'blah/'} 
blah/foo.txt 
$ basename $filename 
foo.txt 
$ realfilename=$(basename "$filename") 
+0

参照:http://www.gnu.org/software/bash/manual/bashref。html#シェルパラメータ拡張 –

+0

ありがとう、私はちょうど正規表現を使用すると、この1つに行く方法だろうと思った。 – martincarlin87

+1

@ martincarlin87:経験則として、正規表現は、問題を解決するために最善の方法でなければなりません。 – hop

3

はい、bashは、例えば、正規表現をサポートしています

$ [[ 'abc' =~ (.)(.)(.) ]] 
$ echo ${BASH_REMATCH[1]} 
a 
$ echo ${BASH_REMATCH[2]} 
b 

ていますが、むしろbasenameユーティリティに

$ f='/some/path/file.ext' 
$ echo "/new/path/$(basename $f)" 
/new/path/file.ext 
情報の

優れた供給源であるbashのマニュアルページ

のbashで
1

pattern=/home/devtestdocs/devtestdocs-repo/ 
testdocsdirurl=/tmp/ 
filename=/foo/bar/home/devtestdocs/devtestdocs-repo/filename 
echo ${filename/$pattern/$testdocsdirurl} # => /foo/bar/tmp/filename 
0

あなたが探しているを使用する場合がありますPowerShellでの正規表現の使用例'bashの古典' 正規表現の使用率が不安定であるに

$input = "hello,123" 
$pattern = ([regex]"[0-9]+") 
$match = $pattern.match($input) 
$ok = $input -match $pattern #return an boolean value if matched.. 
if($ok) { 
    $output = $match.groups[0].value 
    [console]::write($output) 
} else { 
    //no match 
} 

はここに例があります。 あなたはこれを使うことができます: http://www.robvanderwoude.com/findstr.php

+0

彼はバッチファイルやWindow PowerShellではなく、UNIXシェル 'bash'(Bourne Again SHell)を求めました。 – DarkDust