【发布时间】:2026-01-26 10:40:01
【问题描述】:
我有一个包含不同长度行的文本文件。我需要使这些统一,以便 PLSQL Developers 文本导入功能正确读取它们。长度为 89 个字符的行需要在末尾用 4 个空格填充。出于某种原因,sed 的 -i 参数也不被接受。
文件可以在here找到
我尝试了许多不同的正则表达式命令,这些命令是通过 Google 从各种来源找到的,但它们都不起作用,要么是因为“函数无法解析”,要么是它没有添加所需的空格。
我使用 Notepad++ 编写的代码是
查找:(^.{89})($)
替换:\1 \2
我尝试了许多 unix sed 命令,例如 sed -e "s/(^.{89})($)/\1 \2/" file.txtsed -e "s/(^.{89})($)/\1\s\s\s\s\2/" file.txtsed -e "s/(^.{89})($)/\1\ \ \ \ \2/" file.txtsed -e "s/\(^.\{89\}\)\($\)/\1\ \ \ \ \2" file.txtsed -e 's/\(^.\{89\}\)\($\)/\1[[:space:]]\2/g' file.txt
@987654327 @sed -e 's/(^.{89})($)/\1[[:space:]]{4}\2/g' file.txt
【问题讨论】:
-
您使用的是 Mac OS 吗?试试
sed -i '' 's/^.\{89\}$/& /' file.txt(&后面有 4 个空格)。在 POSIX BRE 模式中,{m,n}量词必须有转义大括号。如果-i仍然不起作用,请使用sed 's/^.\{89\}$/& /' file.txt > newfile.txt -
最好放一些示例文本。
-
-i选项“不被接受”是什么意思?不要将行尾$包含为($)的捕获组。这是不必要的,也不会起作用。你试过sed -e "s/(^.{89})$/\1 /" file.txt吗? -
@lurker 将 -i 传递给 sed 我得到“sed:非法选项 -- i”。我刚刚尝试了您的命令并收到“无法解析”错误。
-
抱歉,我的建议有点草率。试试这个:
sed -e "s/([^.]{89})$/\1 /" file.txt