同じパターンに従う次のfile.txtがあり、IPを追加してファイルの場所を修正したいと思います。
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65
/bin/false
ユーザーコンソールをユーザーとして含む行の末尾にIPを追加したいと思います。
USER CONSOLA *,!10.249.247.4,!10.249.245.65,!10.249.245.90,
現在、ドキュメント全体にIPのみを追加できますが、以下を使用して特定のコード行に追加することはできません。
sed 's/\r\?$/,!10.10.11.1/' file.txt
答え1
行の先頭(アンカー)で一致し、行の^
終わり$
(アンカー)の新しいテキストに置き換えます。
$ sed '/^USER CONSOLA/ s/$/,!10.10.11.1/' file.txt
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65,!10.10.11.1
/bin/false
ファイルに保存したいWindows / DOSスタイルのCRLF行末がある場合は、上記の内容を次のように修正してください。
sed '/^USER CONSOLA/ s/\r$/,!10.10.11.1\r/' file.txt
もしあなたならいいえDOSエンディングを維持するには、まずそれを削除するか、dos2unix
sedでこれを実行する追加のコマンドを追加します。
sed -e 's/\r$//' -e '/^USER CONSOLA/ s/$/,!10.10.11.1/' file.txt
答え2
同じ効果を得るには、次の方法を使用します。
sed "/USER CONSOLA/s/.*/&\,\!10.249.245.90,/g" filename
出力
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65,!10.249.245.90,
/bin/false