1

XML ファイルの特定の行の前に数行挿入しようとしています。機能していますが、フォーマットは保持されません。先頭の空白は無視されます。IFS= を使用する必要があることはわかっています。他の多くのリンクに加えて、次のリンクでもクロスチェックしましたが、役に立ちませんでした。:(

私がここで犯している間違いを誰か指摘してもらえますか?

読み取り中に先頭の空白を保持する>> bashでファイルを1行ずつ書き込む

while read line
do
    pattern=keepDependencies
    input_file=/home/john/data_file
    file_to_change="${backup_dir}/"$line"/config.xml"

    while IFS= read -r insert_text
    do
        sed -i "/$pattern/i $insert_text" $file_to_change
    done < "$input_file"
done < days_to_keep_absent



データファイル:

[john ~]$ cat data_file
  <logRotator>
        <daysToKeep>-1</daysToKeep>
        <numToKeep>5</numToKeep>
        <artifactDaysToKeep>-1</artifactDaysToKeep>
        <artifactNumToKeep>-1</artifactNumToKeep>
  </logRotator>



config.xml:

<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description>I&apos;ll clean all the temporary permissions</description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.security.AuthorizationMatrixProperty>
    ...
    ...



出力:

<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description>I&apos;ll clean all the temporary permissions</description>
<logRotator>
<daysToKeep>-1</daysToKeep>
<numToKeep>5</numToKeep>
<artifactDaysToKeep>-1</artifactDaysToKeep>
<artifactNumToKeep>-1</artifactNumToKeep>
</logRotator>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.security.AuthorizationMatrixProperty>
    ...
    ...
4

2 に答える 2

0

これは read (および他の多くのシェルの機能) の機能です。

あなたはそれを回避することができます:ファイルにchar(例: "|")を追加し、行を出力するときにそれを取り出します

アルゴリズムをチェックせずに再利用します(先頭の空白がないことを除いて、必要なことを行うとあなたは言います):

while ループは次のようになります。

sed -e 's/^/|/' < "${input_file}" > "${input_file}_modified"
while IFS= read -r insert_text
do
    sed -i "/$pattern/i $( echo "$insert_text" | sed -e 's/^|//' )" $file_to_change
done < "${input_file}_modified"

お役に立てれば

于 2013-12-26T10:23:39.480 に答える