4

ファイルが 1 つだけ見つかった場合にファイルを自動的に開く検索スクリプトがあります。私が現在それを処理している方法は、検索結果の行数で単語カウントを行うことです。これを行う簡単な方法はありますか?

if [ "$( cat "$temp" | wc -l | xargs echo )" == "1" ]; then
    edit `cat "$temp"`
fi

EDITED - これがスクリプト全体のコンテキストです。

term="$1"
temp=".aafind.txt"

find src sql common -iname "*$term*" | grep -v 'src/.*lib'  >> "$temp"

if [ ! -s "$temp" ]; then
    echo "ø - including lib..." 1>&2
    find src sql common -iname "*$term*"  >> "$temp"
fi


if [ "$( cat "$temp" | wc -l | xargs echo )" == "1" ]; then
    # just open it in an editor
    edit `cat "$temp"`
else
    # format output
    term_regex=`echo "$term" | sed "s%\*%[^/]*%g" | sed "s%\?%[^/]%g" `
    cat "$temp" | sed -E 's%//+%/%' | grep --color -E -i "$term_regex|$"
fi

rm "$temp"
4

6 に答える 6

7

私が誤解していない限り、変数$tempには 1 つ以上のファイル名が 1 行に 1 つずつ含まれています。ファイル名が 1 つしかない場合は編集する必要がありますか?

[ $(wc -l <<< "$temp") = "1" ] && edit "$temp"

$tempがファイル名を含むファイルの場合:

[ $(wc -l < "$temp") = "1" ] && edit "$(cat "$temp")"
于 2014-01-29T22:51:26.777 に答える
1

いいえ、これは方法ですが、過度に複雑にしています:

if [ "`wc -l $temp | cut -d' ' -f1`" = "1" ]; then 
    edit "$temp";
fi

それを複雑にしているのは次のとおりです。

  • catの無用な使用
  • の無用な使用xargs

editそして、 $temp のコンテンツでファイルを編集している猫 $tempが本当に必要かどうかはわかりません

于 2014-01-29T22:50:19.163 に答える