2,525 views
この記事は最終更新から 602日 が経過しています。
今更だがちょっと迷ったので備忘録
■やりたかったこと
$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
とすればよい。
因みに上で使用したオプションは?
-i : ファイルを上書き保存する。
-e : この直後にコマンドを書くという指示。 ※-e を複数書けば複数コマンドを繋げて書ける。
因みに上で使用したコマンドは?
s : パターンを指定して置換する。
g : 複数マッチした場合はすべてを処理対象とする。
参考: 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 : <spanで始まること。
・[^>]* : >ではない文字 0個以上の繰り返しであること。
・> : 最後は > で終わること。
因みに…
行末を \ でつなげば複数行に分けて書ける。
sed -e "s/<span[^>]*>//g" \ -e "s/<\/span>//g" tmp.txt
■応用#2
JavaScriptファイルをアップロードした後、文字数を少なくするために、
2行目: 行頭の空白文字を削除
3行目: 「//」から始まるコメント削除
4行目: 改行文字削除
5行目: 空行削除
6行目: 連続した空白文字を一つにまとめる
を実行したい。
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
因みに上で使用したオプションは?
-r : 拡張正規表現を使うことを宣言。ここでは「+」が拡張正規表現だ。{1,}で置き換え可能だが…
※上記の 3行目は注意!
URLとして書かれた「//」も削除してしまう… 要改善
因みに…
行末を \ でつなげば複数行に分けて書ける。
この場合、-i -r とファイル名はまとめて一回の記述でよい。
TRG=xxxxxx.js sed -i -r -e "s/^\s+//g" \ -e "s%//.*$%%g" \ -e "/^$/d" \ -e ':loop; N; $!b loop; s/\n//g' \ -e "s/\s+/ /g" $TRG
■参考情報
有用な情報をありがとうございます。m(_ _)m
https://atmarkit.itmedia.co.jp/ait/articles/1610/13/news015.html
■備忘録 : よく使うオプション
-i : ファイルを上書き保存する。
-e : この直後にコマンドを書くという指示。 ※-e を複数書けば複数コマンドを繋げて書ける。
-n : 処理対象でない部分は出力せず。(未指定時、未処理の行なども出力される。)
■備忘録 : よく使うコマンド
s : パターンを指定して置換する。
g : 複数マッチした場合はすべてを処理対象とする。。