假如有如下文本数据(简化后的):
aaaa
bbbbb
ccccc
<html>
11111
2222
3333
</html>
ddddd
eeeee
ffffffff
我想去掉 html 标签中的换行符。
确实可以用 emacs,vim 打开再选中再替换,但是有两个麻烦的地方:1.是需要打开一个编辑器 2.是文件一大就很卡。
sed,awk好像搜索了一下,用编程语言感觉也麻烦,要打开一个编辑器写。
不知道有没有awk的增强版语法友好的命令行工具处理这个事情。
perl -pe 's/\n// if /<html>/../<\/html>/' file.txt
5 个赞
awk 'BEGIN {F=0;} {if($0~/<html>/){F=1};if($0~/<\/html>/){F=0};if(F){printf"%s",$0}else{print $0}}' test.html
其实awk也挺方便的
1 个赞
GNU sed:
#+BEGIN_SRC sh :results output
echo "aaaa
bbbbb
ccccc
<html>
11111
2222
3333
</html>
ddddd
eeeee
ffffffff" | gsed '/<html>/{:x;N;/<\/html>/!bx};s/\n/ /g'
#+END_SRC
#+RESULTS:
: aaaa
: bbbbb
: ccccc
: <html> 11111 2222 3333 </html>
: ddddd
: eeeee
: ffffffff
2 个赞
Vim/Neovim 版:
nvim -es +"/<html>/,/<\/html>/s/\n// | up"
# -es 静默批量处理模式
# +/-c cmd 运行命令
# <range>s/pat/sub/g 经典替换
# | up/update 顺序运行,更新文件。
如果是 vim 的话,后面要加上退出命令: | qa!
。
1 个赞