AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 492639
Accepted
Abdillah
Abdillah
Asked: 2019-01-06 02:44:29 +0800 CST2019-01-06 02:44:29 +0800 CST 2019-01-06 02:44:29 +0800 CST

如何使用 tr 将双新行替换为单行?

  • 772

给定一个文本,

$ cat a.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at magna sed libero accumsan ultrices. Proin varius tortor risus, at pulvinar quam auctor 
vitae.


Etiam iaculis ipsum quis lacus convallis finibus. Nunc fermentum, nunc sit amet egestas congue, odio quam sollicitudin velit, quis venenatis augue 
nibh sed tortor.

我无法使用此命令删除双空行。

$ tr '\n\n' '\n' < a.txt 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at magna sed libero accumsan ultrices. Proin varius tortor risus, at pulvinar quam auctor 
vitae.


Etiam iaculis ipsum quis lacus convallis finibus. Nunc fermentum, nunc sit amet egestas congue, odio quam sollicitudin velit, quis venenatis augue 
nibh sed tortor.

用其他 char 作品替换单个新行,是不是很奇怪?

replace newlines
  • 1 1 个回答
  • 1658 Views

1 个回答

  • Voted
  1. Best Answer
    ilkkachu
    2019-01-06T03:05:56+08:002019-01-06T03:05:56+08:00

    tr一次只看一个字符,所以tr ab cd告诉改变a->c和b-> d。它不关心字符的输入顺序,或者它们中的任何一个是否丢失,所以:

    $ echo "a b bba" | tr ab cd
    c d ddc
    

    如果第二个列表较短,则通过重复最后一个字符将其扩展到第一个列表的长度。因此tr abc d,将任何a, b, cto更改为d, 并将tr '\n\n' '\n'换行符更改为换行符,这不会做任何事情。

    $ echo "a b bcba" | tr abc d
    d d dddd
    

    也就是说,在替换后-s可以选择squeeze相同的字符,因此tr -d '\n' '\n'可以用换行符替换换行符,然后在一行中只留下一个换行符:

    $ cat test.txt
    foo
    
    
    bar
    
    doo
    $ cat test.txt  | tr -s '\n' '\n'
    foo
    bar
    doo
    

    请注意,在您的示例中,您有两个空行,因此连续三个换行符。如果您想删除换行符,以便段落之间只剩下一个空行(两个换行符),那么我认为您不能使用tr. 但是你可以使用 eg awk。从test.txt上面:

    $ awk '/./ { e=0 } /^$/ { e += 1 } e <= 1' < test.txt  
    foo
    
    bar
    
    doo
    
    • 0

相关问题

  • 为什么 wc <<<"$string" 显示的长度比 printf "$string" | 长一个字节 厕所?

  • 如何使用awk分隔行

  • 多行附加/替换之前的 sed 模式搜索

  • bash 脚本和交互式 shell 之间的空格差异

  • 从命令行查找和替换 CSS 文件中的颜色

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve