次が私が探している行を提供するのはなぜですか?
grep '<appointment-id internal:ref=1.2.3/>' test.xml
OUTPUT is <appointment-id internal:ref=1.2.3/>
そして以下では2行に分けます。
a=($(grep '<appointment-id internal:ref=1.2.3/>' test.xml))
for i in "${a[@]}"; do
echo "checking $i"
grep -n "$i" delete.xml
done
出力は次のとおりです
checking <appointment-id
checking internal:ref=1.2.3/>
ファイルは次のとおりです
<note>
<to>Jim</to>
<from>John</from>
<heading>Reminder</heading>
<body>Some text</body>
<appointment-id internal:ref=1.2.3/>
</note>
答え1
の出力は、grep
スペースで区切られた2つの単語を含む文字列です。
シェルは引用されていないため、これを2つの単語に分割するため、配列には2つの項目があります。
これはあなたがしたいことをします:
a=( "$( grep -F '<appointment-id internal:ref=1.2.3/>' test.xml )" )
しかし、XMLを解析するのはgrep
恐ろしい考えです。。代わりに適切なXMLパーサーを使用してください。
また、ループが文字列を出力する場合は、次のように置き換えることができます。
printf 'checking %s\n' "${arr[@]}"
git
制御されたファイルの特定のバージョン(以下の説明を参照)でパターンに一致する行を変更したことを確認するには、そのパターンとgit blame -L
バージョンを使用します。詳細についてはを参照してくださいgit blame --help
。
また、パターンに一致する行の行番号を取得するには、次のようにします。
sed -n '/pattern/=' file
行番号を取得するために結果を再入力しないでくださいgrep
。grep
これを行う場合は必ず使用してくださいgrep -F
。それ以外の場合、行に正規表現パターンが含まれていると失敗します。