请教:如何用sed 删除 emacs lisp 风格的以 (load 这5个字符开头的行?
发表于 : 2012-08-21 19:48
请教:如何用sed 删除 emacs lisp 风格的 以 (load 这5个字符开头的行?
文件: ~/.emacs
已知:
× 对 / (1字符)转义成 \/ (2字符);
× 左括号,空格,双引号,右括号,原则上似乎不用转义,如果转义后可以实现目的,
应如何转义: 是否应像单引号,进行1转4方式的转义?即 ' 一个字符,转义成 '\'' 四个字符?
现行方案:
这两行语句可以正常删除两行目标行,但 以 (load 开头的语句无法实现删除。请高人指点.
已执行方案:
另外找到网上其它sed删除重复行的方案,经操作证实对本文件无效。
环境:ubuntu 10.04.3 i386, gnu sed 4.2.1,sh
删除原则:
* 一定要是以 (load 这5个字符开头,并且后面的文字完全相符的行才能执行删除,
避免误删除别人设置的 load 语句。
* 不能进行sort 排序操作,避免文字顺序混乱;
* 尝试过先通过 sed -i 's/aa/bb/;bb/' ~/.emacs 进行替换,再将替换过的新内容删除,但仍无法见效。
文件: ~/.emacs
代码: 全选
;; AUTO ADDED BY EMACS-LOCALE
(load "/etc/emacs/site-start.d/locale/zh-cn-2")
;; EMACS-LOCALE END
;; AUTO ADDED BY EMACS-LOCALE
(load "/etc/emacs/site-start.d/locale/zh-cn-1")
(load "/etc/emacs/site-start.d/locale/zh-cn-1")
(load "/etc/emacs/site-start.d/locale/zh-cn-1")
(load "/etc/emacs/site-start.d/locale/zh-cn-2")
(load "/etc/emacs/site-start.d/locale/zh-cn-1")
;; EMACS-LOCALE END
× 对 / (1字符)转义成 \/ (2字符);
× 左括号,空格,双引号,右括号,原则上似乎不用转义,如果转义后可以实现目的,
应如何转义: 是否应像单引号,进行1转4方式的转义?即 ' 一个字符,转义成 '\'' 四个字符?
现行方案:
代码: 全选
sed -i '/^;; AUTO ADDED BY EMACS-LOCALE/d' $HOME/.emacs
sed -i '/^;; EMACS-LOCALE END/d' $HOME/.emacs
已执行方案:
代码: 全选
sed -i '/^\(load\ \"\/etc\/emacs\/site-start.d\/zh-cn-1"\)/d' $HOME/.emacs
sed -i '/^\(load\ \"\/etc\/emacs\/site-start.d\/zh-cn-2"\)/d' $HOME/.emacs
环境:ubuntu 10.04.3 i386, gnu sed 4.2.1,sh
代码: 全选
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' $HOME/.emacs
sed -i '$!N; /^\(.*\)\n\1$/!P; D' $HOME/.emacs
* 一定要是以 (load 这5个字符开头,并且后面的文字完全相符的行才能执行删除,
避免误删除别人设置的 load 语句。
* 不能进行sort 排序操作,避免文字顺序混乱;
* 尝试过先通过 sed -i 's/aa/bb/;bb/' ~/.emacs 进行替换,再将替换过的新内容删除,但仍无法见效。