2

パターンのみを含む最初のコメント解除された行を編集しようとしています。コメントされたものとコメントされていない同様の行がいくつかあるため、最初に出現したものだけを編集することはできません

オリジナル:

#/app2/rsync_root:IP1:IP2:IP3:IP4
/app2/rsync_root:IP1:IP2:IP3:IP4
/app2/rsync_root:IP1:IP2:IP3:IP4

編集後の期待される結果:

#/app2/rsync_root:IP1:IP2:IP3:IP4
/app2/rsync_root:ipaddr1:ipaddr2:ipaddr3:ipaddr4
/app2/rsync_root:IP1:IP2:IP3:IP4

何が起こっている:

#/app2/rsync_root:IP1:IP2:IP3:IP4
/app2/rsync_root:ipaddr1:ipaddr2:ipaddr3:ipaddr4
/app2/rsync_root:ipaddr1:ipaddr2:ipaddr3:ipaddr4

LHS の最初のコロンを区切り文字として使用できます。後のフィールドは何でもかまいません。

現在、私はこのコマンドを使用しています:

sed -ie '/^#/!s/:.*/:$ipaddr1:$ipaddr2:$ipaddr2:$ipaddr1/'
4

4 に答える 4

2
perl -pe'/^#/ or s/:\K.*/.../ .. 0'

また

perl -pe's/^(?!#)[^:]*:\K.*/.../ .. 0'
于 2012-12-17T10:41:53.087 に答える
0

普通の古いed

ed file << END
/^[^#]/s/:.*/:$ipaddr1:$ipaddr2:$ipaddr2:$ipaddr1/
w
q
END
于 2012-12-17T13:06:13.520 に答える
0
repl="ipaddr1:ipaddr2:ipaddr3:ipaddr4"
awk -v r="$repl" 'found==0 && !/^#/ {sub(/:.*/, ":" r); found=1} 1' file > new &&
mv new file
于 2012-12-17T12:59:03.013 に答える
0

非標準の sed (非標準) を使用しているため、既存のソリューションにフラグを-i追加するだけでよい場合があります。q

sed -ie '/^#/!s/:.*/:$ipaddr1:$ipaddr2:$ipaddr2:$ipaddr1/q'
于 2012-12-17T12:57:12.067 に答える