2017-11-16 15 views
1

ソフトウェアの競合を解決するために削除する必要のあるファイルがあります。 ファイルのフォルダパスが* .iniファイルに保存されていることがわかりました。その行の特定のセクションをgrepし、そのファイルにcdして問題のファイルを削除します。変数を割り当てる際のgrep文字列

は、これまで私がやった:

#!/bin/bash 
# 

PROFFILE=$HOME/.mozilla/firefox/profiles.ini 
DIRTEST=$HOME/.mozilla/firefox/ 

if [ -f $PROFFILE ] 
     then 
       echo "yes" 
#    PROFPATH="$(cat $PROFFILE grep ^[[\s\S]*?(.default)$)" 
       echo $PROFPATH 

     else 
       echo "no" 
fi 

#script ends here 
# 
# 

イム私はそれらを混合することによって、グレップと正規表現と間違って何かをやって続行するかどうかはわかりません確認してください。

これは使用

Name=default 
IsRelative=1 
Path=l00jsdm9.default 
Default=1 
+0

少なくとも、 'cat'と' grep'の間にパイプがありません。 –

答えて

0

このiniファイルの例です:

PROFPATH=$(awk -F= '$1=="Path" {print $2}' $PROFFILE) 

またはファイルに多くのパス変数を持ち、表現と一致するものが必要な場合:

PROFPATH=$(awk -F= '$1=="Path" && 2 ~ /default/ {print $2}' $PROFFILE) 
+0

ありがとうthanasisp 私はawkを使ったことがないので私に理解してもらえます: -F =は "Path ="を残りの部分から分離するフィールド区切り文字ですか? '$ 1 == "Path"は$ PROFFILEを呼び出すときに$ 2のプリントから削除される最初のフィールドですか? – dquake

+0

はい、フィールド区切りは '='です。今、 '$ 1'は最初のフィールド(変数)で、' $ 2'は2番目のフィールド(値)です。それからmain awkの部分があります: '' condition {action} ''。条件は: '$ 1'が文字列" Path "であり、' $ 2'が文字列パターン "default"を含む場合です。条件が真であれば、 'print $ 2'が実行されます。残りの行については何も起こりません。 – thanasisp

関連する問題