平成30/ 2018-12-19 23:45
LINUX SED


#### 正規表現を機能させる為に、() や、[] 、+ をエスケープしないといけないみたい。

/([^:]+):[0-9]+/$1/

の置換を行いたい場合、以下のように円マークつけないと、機能しなかった。

/\(\[^:\]\+\):\[0-9\]\+/\1/

コマンドでは以下の感じ。

find /var/log/httpd/zz.jp | xargs cut -f1,2,6 -d'"' | sed -e "s/^\([^:]\+\):[0-9]\+/\1/g"




####


sed -i
置換したものを上書く。

sed '1s/^/hoge/1'
1行目だけ評価し、最初の1回のみ置換する。

sed '1s/^/hoge/g'
1行目だけ評価し、該当する全て置換する。

/ & は置換前と置換後をくっつける
----
sed -i 's/\xe3\x80\x9c/\~/g' app/views/hawaii/_shops.html.erb
~ を \~ として、&をエスケープしている。しないと、\xe3\x80\x9c とくっついて置換されてしまう。


/ 特殊文字置換
----
MACの、波ダッシュを「~」に、特殊な半角スペースを半角スペースに置換する。
(UTF8が前提)

Windows には、文字が無いので、16進数で検出と置換をしないといけない。

16進数が不明の場合は以下ツールで置換する。
http://kujirahand.com/web-tools/Hex.php?ve=%EA%80%80&charset=utf-8
-
波ダッシュは
e3809c
-
特殊な半角スペースは
ea8080
-
の16進数になる。

これを、echo で確認する。
2文字ごとに、\x で区切る。
UTF8 なので、きっと、1文字になることは無いのだと思う(1 の16進数は 31になるので)
-
echo -en "\xe3\x80\x9c"
echo -en "\xea\x80\x80"
-
-e は、改行しないという命令(sed で使うので改行しないようにしている)
-n は、エスケープ文字(円マーク)を特殊文字として扱うということ(\x で16進数であることを伝えている)

特殊な半角スペースの存在を確認する。
egrep -Ir $(echo -en "\xea\x80\x80") app/views/
- ファイルだけ抽出する
egrep -Irl $(echo -en "\xea\x80\x80") app/views/
- 一枚やってみる
sed -i 's/\xea\x80\x80/ /g' app/views/shops/bodies/_odaiba.html.erb
- 全てやる
egrep -Irl $(echo -en "\xea\x80\x80") app/views/ xargs sed -i 's/\xea\x80\x80/ /g'

波ダッシュも同じく
-
egrep -Ir $(echo -en "\xe3\x80\x9c") app/views/
-
sed -i 's/\xe3\x80\x9c/\~/g' app/views/hawaii/_shops.html.erb
-
~ を \~ として、&をエスケープしている。しないと、\xe3\x80\x9c とくっついて置換されてしまう。
-
egrep -Irl $(echo -en "\xe3\x80\x9c") app/views/
-
egrep -Irl $(echo -en "\xe3\x80\x9c") app/views/ | xargs  sed -i 's/\xe3\x80\x9c/\~/g'



// Thanks.
sedでファイルの内容を置換する
http://webcache.googleusercontent.com/search?q=cache:M7Hm-JQy7GYJ:d.hatena.ne.jp/taro252/20100527/1274929265+&cd=7&hl=ja&ct=clnk&gl=jp

16進数変換(HEX変換)
http://kujirahand.com/web-tools/Hex.php?ve=1&charset=utf-8