你们是如何在命令行下处理文本的?

假如有如下文本数据(简化后的):

   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 个赞

haha, perl确实方便。

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 个赞

感觉有点难。(我太菜了。

Hawk 找到个awk的替代品

这东西看着比awk诡异多了。

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 个赞