grepの使用に問題があります。返される結果は「n-empty」です。つまり、「n」文字がないことを意味します...
以下はスクリプトの例です。
OLDIFS=$IFS
IFS="\\n"
i=$(grep -ril $1 *)
echo $i
IFS=$OLDIFS
IFS='\n'
試してみましたが、IFS="\n"
結果は正しいパスを示していますただIFSを取り除くと...
私はループで結果を使用しますfor theFile in $i; do......done
。結果は正しい方法で使用され、theFile
正しく表示されます。。
$i
唯一の問題は、戦略データである正しいコンソール/ファイル出力がないことです。
コンソールに表示される内容と作成されたファイル(例):
LecteurSy dicatio _sy dic/fiche_93.xml
表示して作成する内容(例):
LecteurSyndication_syndic/fiche_93.xml
どんなアイデアがありますか?
編集:自宅でプレイするためのフルスクリプト;)
#!/bin/bash
monTerminal=$(tty) ; monTerminal=${monTerminal:9}
fichier="/home/importts/tmpCmdOpenFirst$monTerminal.xml"
PWD="`pwd`"
echo "== Recherche dans les fiches ==" > "$fichier"
echo "Recherche : $1" >> "$fichier"
echo "Dans : $PWD" >> "$fichier"
OLDIFS=$IFS
IFS="\\n"
i=$(grep -ril $1 *)
echo $i
echo "== Liste des fichiers trouves ==" >> "$fichier"
echo $i >> "$fichier"
IFS=$OLDIFS
#while read uneFiche
for uneFiche in $i;
do
echo "================================" >> "$fichier"
echo "== $uneFiche" >> "$fichier"
echo "================================" >> "$fichier"
echo "" >> "$fichier"
xmlindent "$uneFiche" >> "$fichier"
done < /home/robert/tmpCmdOpenFirst_liste.txt
nano "$fichier"
#rm $fichier
ベストアンサー1
問題の説明に従うのは簡単ではありません。唯一の有用な情報は失われ、これは出力grep -ril $1 *
(またはむしろ出力サンプル)と問題の説明です。問題はいくつかのパスの空白だと思います。
編集:要求されたサンプルを準備します。
スペースは実際には「n」文字です...
1_LecteurSy dicatio _sy dic/fiche_174.xml
2_Tra sformatio XSL_tif/fiche_174.xml
3_CorrigerTIF_cor/fiche_174.xml
4_Tra sformatio XSL_ge /fiche_174.xml
/編集する
IFS="\\n"
簡単に確認できるので、明らかに間違っていますecho "\\n"
。これが\n
IFS定義に適用されるかどうかはわかりません。代わりに IFS=$'\n' を使用するか、
IFS="
"
編集する
$ '\ n'形式は問題を解決しません。 「空白行」形式では、内容は正しく表示されますが、結果はリスト(1行に1つずつ)として表示されなくなります。結果がおおよその必要なので、「空行」形式を維持しました。
/編集する
IFSを設定する前に復元すると、私には意味がありませんfor uneFiche in $i
。これはラインに影響を与え、echo $i >> "$fichier"
参照によってはるかに簡単になりますi="$(grep -ril $1 *)"
。echo "$i" >> "$fichier"
編集する
i="$(grep -ril $1 *)"
何も動作しないようです。
/編集する
空白とトークン化に問題がある場合は、次のパイプを使用する方が簡単です。
grep -ril --null -- "$1" * | xargs -0 /my/script.sh
そして/my/script.sh
存在
#!/bin/bash
fichier="/home/importts/tmpCmdOpenFirst$monTerminal.xml"
for uneFiche in "$@"; do
echo "================================"
echo "== $uneFiche"
echo "================================"
echo
xmlindent "$uneFiche"
done >> "$fichier"