regex - 如果使用 linux 命令行工具在文本文件的下一行中满足条件,则替换换行符

输入

$ cat input.txt
345 "cuad"  "dfr"
23  "test3" "dfec2
"v1"
33 v2
v3"
32  "key3"  "fer"
12  "rte"   "ef"

目标,仅当下一行不是以数字和制表符开头时,我才想用空格替换换行符

345 "cuad"  "dfr"
23  "test3" "dfec2 "v1" 33 v2 v3"
32  "key3"  "fer"
12  "rte"   "ef"

试试这个 bash command to remove new lines if condition on the next line is met 但我不能适应我的需要

尝试了,还是不行

$ perl -0777 -pe 's/\n(?=[^0-9]+\t)/ /g' input.txt

最佳答案

你可以使用这个带有否定前瞻的 perl 命令:

perl -0777 -pe 's/\R(?!\d+\t|\Z)/ /g' file

345 "cuad"  "dfr"
23  "test3" "dfec2 "v1" 33 v2 v3"
32  "key3"  "fer"
12  "rte"   "ef"
  • RegEx Demo
  • Code Demo

正则表达式详细信息:

  • \R:匹配任何换行符(符合unicode)
  • (?!\d+\t|\Z):否定前瞻断言我们没有 1+ 数字后跟制表符或输入结束

https://stackoverflow.com/questions/73152164/

相关文章:

android - 在 Android OpenGL ES 上只能看到没有几何图形的 glClear

r - 更改 geom_point 的颜色以获得最大 y 值

c++ - 如何使这个递归函数更快? (四叉树)

python - Pandas : Concat rows of a dataframe with

c++ - 优化静态字符串的字符串存储

nestjs - 如何在 NestJS 中安装 nanoid

python - 找不到 openai 命令(mac)

c# - 处理没有并发的任务列表

r - 计算长数据中行之间的差异

javascript - 如何返回 array.reduce 中的对象?