Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【シェルコマンド】あるファイルの中にある空白行やある文字が入った行を削除したい

sedの基本的な使い方

cat hoge.txt | sed -e "s/AAA/BBB/g"

基本的にはこんな感じの使い方

 

ここでAAAやBBBにどこかのPATHが入っているとエラーが出る
"s/AAA/BBB/g"の真ん中にある/とPATHの/の区別がつかないから
コーテーションマークで区切ればうまくいくかとおもったけどだめ・・・

ググったら、/ではなく|で区切れば良いらしい

 

cat hoge.txt | sed -e "s|AAA|BBB|g"

って感じ?

 

逆引きUNIXコマンド/sedでディレクトリ文字列が格納されている変数を展開して置換する - Linuxと過ごす

 

あるファイルの中にある空白行を削除したいとき

cat hoge.txt | sed '/^$/d'

 

ある文字を含む行を削除したい

今回はデータの中に#から始まるコメント行がいくつもあったのでそれを削除したかった

sed '/#/d' hoge.txt
または
grep -v # hoge.txt

 

今までgrepはあるフレーズを含む行をピックアップするものだと思ってましたが、
逆にあるフレーズを含む行以外を表示することもできるらしい

 

複数のファイルの中身をsedで一括置換する

find *.c | xargs sed -i "s/hoge/foo/g"

 

これで、今のディレクトリの .c で終わるファイルの中身で、hogeをfooに一括置き換えできる

sedの-iオプションはファイルを上書き保存するオプション

sedは便利だけどsとかgとか絶対に忘れるのでメモしておく・・・

参考:sedを使って複数ファイルの文字列を一気に置換する - うめすこんぶ