grepコマンドでマッチしないと行を追加

 

grep -Fqオプションを利用して条件にマッチしないと特定行を追加するスクリプトを作ってみた

vi /data/kaka

kaka
hehe

kakaとheheという文字があるファイルを作った

[root@negabaro ~]#grep -Fq "kaka" /data/kaka && echo "papa" >> /data/kaka

[root@negabaro ~]# cat /data/kaka
kaka
hehe
papa

このファイルの中にkakaという文字があれば 最終目の行にpapaをいれてくださいという意味のコマンドを打った

結果は成功!papaができた

[root@negabaro ~]# grep -Fq "keke" /data/kaka && echo "papa" >> /data/kaka
[root@negabaro ~]#
[root@negabaro ~]#
[root@negabaro ~]# cat /data/kaka
kaka
hehe
papa

今度はkekeというファイルがあるとpapaを入れるという意味を持つコマンドを打った

でもkekeはないので何もしない!(賢い)

grep -vFq "kaka" /data/kaka && echo "papa" >> /data/kaka


[root@negabaro ~]# cat /data/kaka
kaka
hehe
papa
papa

notを意味する -vオプションはうまくいかないみたい。。。

今度は &&を ||に変えてみた

[root@negabaro ~]# cat /data/kaka
kaka
hehe

 

[root@negabaro ~]# grep -Fq "keke" /data/kaka || echo "papa" >> /data/kaka
[root@negabaro ~]#
[root@negabaro ~]#
[root@negabaro ~]#
[root@negabaro ~]# cat /data/kaka
kaka
hehe
papa

kekeが存在するとpapaを入れないでという意図で打ったら

kekeは存在したのでpapaを入れた!

[root@negabaro ~]# grep -Fq "kaka" /data/kaka || echo "papa" >> /data/kaka
[root@negabaro ~]#
[root@negabaro ~]#
[root@negabaro ~]# cat /data/kaka
kaka
hehe
papa

kakaが存在するとpapaを入れないで

kakaは存在したのでpapaを入れなかった

よし!来たぞ

じゃ、この業績を踏まえて以下のように応用をしてみた

grep -Fq [appdefaults] /etc/krb5.conf || echo -e ‘\n’\[appdefaults\]$’\n’ validate=false >> /etc/krb5.conf

[appdefaults]という行がないと以下のコマンドを最終行に追加するコマンドが出来上がり!


[appdefaults]
 validate=false 

 


grep -fオプションについて

正規表現ではなく固定文字列として扱う、-F オプションもあります。正規表現として扱わせたくない、特殊文字がある場合に使えます

http://d.hatena.ne.jp/ihag/20071226/1198687989(grep –fオプション)

 

echoで改行入れる方法

http://d.hatena.ne.jp/rero/20071117/p1


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です