(51) sedでファイル中の文字列を置換する。

投稿者: | 2017年7月17日

この記事は最終更新から 401日 が経過しています。

今更だがちょっと迷ったので備忘録

■やりたかったこと

$c_tk_y[$r][$c2]=10;

$c_tk_y[$r][$c2]=13;
に変えたかった。

■実現方法

エスケープ文字を考慮せずに書けばこういうこと。

sed -i -e "s/$c_tk_y[$r][$c2]=10;/$c_tk_y[$r][$c2]=13;/g" *.php

この中で「$」「[」「]」の3文字は正規表現でエスケープが必要なので、
エスケープ文字を考慮して書けばこうなる。

sed -i -e "s/\$c_tk_y\[\$r\]\[\$c2\]=10;/\$c_tk_y\[\$r\]\[\$c2\]=13;/g" *.php

とすればよい。

参考: http://qiita.com/katsukii/items/1c1550f064b4686c04d4

■応用#1

SyntaxHighliterを導入前は、ブログ上のソースコードの装飾に spanタグをせっせと埋め込んでいた。
SyntaxHighliterを使うようになったため、これを一括で削除したい。

sed -e "s/<span[^>]*>//g" -e "s/<\/span>//g" tmp.txt

一つ目の s/<span[^>]*>//g は以下の通り。
・<span で始まること。
・[^>]* → >ではない文字の繰り返しであること。
・*> → 最後は > で終わること。

■応用#2

JavaScriptファイルをアップロードした後、文字数を少なくするために、
1) 行頭の空白文字を削除
2) コメント削除
3) 改行文字削除
4) 空行削除
5) 連続した空白文字を一つにまとめる
を実行したい。

TRG=xxxxxx.js
sed -i -r -e "s/^\s+//g" $TRG
sed -i -e "s%//.*$%%g" $TRG
sed -i -e "/^$/d" $TRG
sed -i -e ':loop; N; $!b loop; s/\n//g'  $TRG
sed -i -r -e "s/\s+/ /g" $TRG

カテゴリー: sed

コメントを残す

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