私はthisを投稿しました。 sedの行を修正して正しい行を見つけることを避けるために、それ自体を修正するスクリプトに関するもので、すべて[]
をsed正規表現の内部に入れるというトリックでうまくいきました。bashスクリプトのためのsedパズル
これはよく似ていますが、もう少し複雑です。他の投稿では、検索する行は静的であった。今度は、その行にいくつかのオプションがあります。
#!/bin/bash
possible_locations=(
"/somewhere/path/"
"/another/different/path/"
#Custom location (set=0)
)
#Here goes my sed line
そして、他の回のコードは次のとおりです:
#!/bin/bash
possible_locations=(
"/somewhere/path/"
"/another/different/path/"
"/other/one/path/" #Custom location (set=1)
)
#Here goes my sed line
タブのインデントに保ち、目だから、時にはコードは、このようにしている(「設定= X」でラインを見て)ラインの始めに。
私が望むのは、sed行そのもの(他のポストのようなもの)にマッチさせずに、この(set = x)行を両方で置き換えることなく、スクリプト自体を(sed -i
を使って)正規表現で修正することです用例:
"/new/path/" #Custom location (set=1)
だから私は時々だけ#Custom location (set=0)
と時々私はなど、グループをキャプチャさまざまな組み合わせを試してみました"/new/path/" #Custom location (set=1)
ため"/other/one/path/" #Custom location (set=1)
を持っています(同じタブのインデントを維持する)ラインを交換したい...しかし、それを動作させることはできません。私は非常に近いと思う!ここに私の非稼働sedの行は次のようになります。
sed -i "s/^\(.*\)#[C]ustom location (set=[0-1])/\1\"\\/new\\/path\\/\" #Custom location (set=1)/" "/path/to/this/script.sh" 2> /dev/null
$NEW_PATH
さんと競合する代わりに/
の_
SEDのセパレータを使用していることに注意してくださいあなたの正規表現で、しかしあなたは正しい方法で私に指摘しました。 'sed -ri 's:(\ s + | \ t +)([\" 0-9a-zA-Z/\ -_] +)?\ s?(1)/ new/path/\ "\ 31 \ 5:" "/path/to/this/script.sh" 2>/dev/null'。私は区切り文字を ':'に変更しました。 '_'をディレクトリ名として使うことができるからです。スペースと同じですので、正規表現を少し調整しました。 – OscarAkaElvis