grepとIFSは非常に奇妙に動作します。

grepとIFSは非常に奇妙に動作します。

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"。これが\nIFS定義に適用されるかどうかはわかりません。代わりに 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"

おすすめ記事