regex - 在 sed 中无法用新行替换数字,但可以在 sublime 中替换

标签 regex sed replace

我有一个多行文档。我想替换不以数字结尾的行中的换行符

假设文档是:

line1
line2
line
line
line
line4

我想要得到

line1
line2
linelinelineline4

我可以在 Sublime 中通过将 ([^\d])(\n) 替换为 \1 来完成此操作。在 sed 中尝试此操作时,它不起作用。有人可以帮助我这有什么问题吗?提前致谢

最佳答案

sed 不支持 \d,您可以使用 [0-9] 代替。另外,默认情况下,sed 逐行工作,并且您无法操作行尾的 \n 字符。有多种方法可以克服这个问题,但我不建议使用 sed 来完成此任务。

$ awk '{ORS = /[0-9]$/ ? RS : ""} 1' ip.txt
line1
line2
linelinelineline4
  • ORS 是输出记录分隔符
  • /[0-9]$/ 检查输入行是否以数字结尾
    • 如果是这样,请使用 RS 作为 ORS(默认为 \n)
    • 否则,使用空字符串
  • 1 是一个 awk 习惯用法,作为打印 $0(输入记录)内容的快捷方式


perl 允许操作换行符,因为它不会像 sedawk

那样删除并添加回来
$ perl -pe 's/(?<!\d)\n//' ip.txt
line1
line2
linelinelineline4

关于regex - 在 sed 中无法用新行替换数字,但可以在 sublime 中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60664940/

相关文章:

linux - 复制一个文件夹中多个文件中的文本

jQuery 查找带有类名的 td 并更改文本

java - 如何以一个不会最终替换另一个字符串的方式替换两个字符串?

python - re.sub() 在多行之间替换

正则表达式 (grep) 向后匹配

bash - 在 bash 中,如何处理命令行上的所有用户输入

linux - 使用正则表达式提取多个值并将它们重新格式化为 shell oneliner 中的新字符串?

可以将二进制文件中的字符串替换为不同但长度相同的字符串的 Ruby 脚本?

python - 提取两个特殊字符之间的字母数字字符串

python - 这个 Django 正则表达式是什么意思? `?P`