私はディレクトリを再帰的に検索し、特定の文字列を見つけて、その特定のファイルでその文字列を開くbashスクリプトを作成しています。
私がこの関数を呼び出すexert
理由は、私のソフトウェアで特定の変数を見つけるのに苦労しているからです。たとえば、私のウェブサイトでdivに「I like big cats」などのフレーズを使用し、そのdivを編集したい場合は、「exert 'I like big cats」を入力すると、そのdivを含むファイルが開きます。 divの正確な位置。
これは私のコードです。
#!/bin/bash
echo "Searching for $1"
echo "----Inside files----"
grep --color=always -nr "$1" * > /tmp/tmpsearch; #searches for ' I like big cats'
filesNew=`cat /tmp/tmpsearch` #stores it in a variable that can be split - future version will keep this in memory
readarray -t files <<<"$filesNew" #it is split to an array called $files
x=0;
IFS=":"; #":" is the string delimter for grep's output of files with the string, alongside the line number the string is found inside the file
for i in "${files[@]}"; do
#The colon operator separates grep's output of line numbers and files that contain the string 'I like big cats'
read -ra FOUND <<< "$i"
x=$[$x+1];
printf "Found index: $x\n"
line=`echo "${FOUND[1]}"`
file=`echo "${FOUND[0]}"`
nano +$line ./$file #This should open nano at the exact line number
done
exit 1
すべてがうまくいきますが、nano
bashスクリプトで配列出力呼び出しを使用するとエンコードエラーが説明されているようです。
bashscriptの文字列は大丈夫ですが、nano./app.vue
は./^[[35m^[[Kapp.vue^[[m^[[K^[[36m^[[K
。ファイル名の周りに削除できないコマンド文字がたくさんあります。
nano app.vue
有効なスクリプトの先頭に配置すると、nano
just または just の問題ではなく、bash
配列出力 (grep で文字列が分割されている) の使用に問題があることがわかります。
ベストアンサー1
色指定文字列は次のとおりです。 ^[ は ESC、[..m は端末の前景色などです。
grep --color=never 設定