rssフィードに含まれる特殊文字をsedの正規表現で置換する

rssフィードに特殊文字が含まれてるとフィードエラーで読み込めない場合があるから置換する

対象となる特殊文字はこれら5つ。
&
<
>

置換後はそれぞれこれに。
&amp;
&lt;
&gt;
&apos;
&quot;

sedの置換方法:
$ sed ‘s/置換前文字/置換後文字/g’ 対象ファイル名

拡張子を.sedのファイル作って中に複数の条件入れて一括置換:
s/置換前1/置換後1/g
s/置換前2/置換後2/g
s/置換前3/置換後3/g

実行:
$ sed -f 置換.sed 対象ファイル名
対象ファイル内を置換して置換後の内容で上書き保存するのは -iオプション
$ sed -i sed -f 置換.sed 対象ファイル名

こんなふうに続けて書きたいところだけど、これだとエラーする
$ sed -i -f 置換.sed 対象ファイル名
$ sed -if 置換.sed 対象ファイル名

空白行削除(行全体指定してをdコマンドで削除):
/^$/d
参照: kabipan.com

置換に使う改行の指定は
置換前\n
置換後\のあとに実際の改行

正規表現の例:

$ sed -e “s/oldtext/newtext/g” #文字列の変換
$ sed -e “s/text//” #文字列の削除
$ sed -e “s/^text//” #行頭にtextがあった場合削除
$ sed -e “s/text\$//” #行末にtextがあった場合削除
$ sed -e “s/abc/abcxyz/g” #abcの後に文字列を追加
$ sed -e “s/^/text/” #行頭に文字列を追加
$ sed -e “s/\$text/” #行末に文字列を追加
$ sed -e “s/.*/abc/” #.*は全ての文字列を表す
$ sed -e ‘s/<tab>/<space>/g’ #タブをスペースに変換
$ sed -e ‘s/<space><space>*/<space>/g’ #複数のスペースを1つのスペースに変換
# ホワイトスペースを1つのスペースに変換
$ sed -e ‘s/[<space><tab>][<space><tab>]*/<space>/g’
$ sed -e ‘s/^[<space><tab>]*//’ #行頭のホワイトスペースを削除
$ sed -e ‘s/[<space><tab>]*$//’ #行末のホワイトスペースを削除
$ sed -e “/text/d” #textを含んだ行を削除
$ sed -e ‘/^$/d’ #空白行を削除
$ sed -e “5,20s/oldtext/newtext/g” #5行目から20行目を変換
$ sed -e ‘1d’ #1行目を削除
$ sed -n ‘1p’ #1行目を表示

引用元: sed – あんみのの備忘録

正規表現参照:
itpro

コメント

タイトルとURLをコピーしました