【问题标题】:bash how to replace/delete beginning of line followed by white spacebash如何替换/删除行首后跟空格
【发布时间】:2020-02-05 03:14:27
【问题描述】:

我正在解析长文本,之前命令的部分副产品是: 1) 只有一个空格的行 2) 一行有一个空格,后跟一个句子。

我该如何摆脱它们?

我尝试了以下方法:

tr -s [:space:] |sed -r 's/\^ /\^/g' > output.txt

还有以下

tr -s [:space:] |sed -r 's/\n //g' > output.txt

以及以下

sed 's/\([.!?]\)[[:space:]]*/\1\n/g' file > output.txt

没有成功。

示例输入(下划线表示空格,以便更好地理解)

_Sir_William_Blackstone,
_
_Commentaries_on_the

样本输出

Sir_William_Blackstone,
Commentaries_on_the

【问题讨论】:

  • 我不明白你的描述。您是想摆脱行首的空白还是其他什么?
  • 正确,我试图摆脱句子开头的那个空白。我假设这也会让我清理只有 1 个空格的空行(由 tr -s [:space:] 留下)。
  • 在句首还是行首?如果它在句子的开头,句子是如何定义的?此外,清理空白行通常是另一回事。
  • 请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。
  • 完成。添加了示例输入和输出以供参考。

标签: bash text sed


【解决方案1】:

我会使用sed

sed -E '/^\s*$/d; s/^\s*//;' < in > out

这会删除只有空格的行,并从其他行的开头去除空格。

参考https://www.gnu.org/software/sed/manual/sed.html

有一些改进,但这是大体思路。

【讨论】:

  • sed 's/^ //' 仅此一项(我测试过)也可以删除只有一个空格的行(从 tr -s [:space:] 中剩余),因为没有任何内容可用于它被删除的行。谢谢
  • @HenryM 空行不会自动删除(除非管道中有其他东西正在这样做?)。
  • 这是代码:tr -s [:space:] output.txt。根据我的结果和我的样本结果,它是有效的。 tr -s 只留下单个空格,当它是一行中唯一的东西时,这可能会很烦人。您的代码删除了该行的最后一个空格,并且它分散了。如果一行没有任何东西,我怎么能存在......我错过了什么吗?
  • 为什么sedtr 同时使用sed 只需一个进程即可完成这两种简单的功能?
  • tr -s [:space:] 还去掉了许多由文本括起来的连续空格。 plus 就是这么容易使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 2015-02-16
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
相关资源
最近更新 更多