我有一个文本文件,其中包含不同长度的行。我需要使它们统一,以便PLSQL Developers文本导入功能可以正确读取它们。长度为89个字符的行的末尾必须填充4个空格。出于某种原因,也不会接受sed的-i参数。
可以找到文件here
我尝试通过Google从各种来源找到许多不同的正则表达式命令,但是它们都不起作用,因为“功能无法解析”或没有添加所需的空格。
我使用Notepad ++编写的代码是
查找:(^。{89})($)
替换:\ 1 \ 2
我尝试了许多Unix sed命令,例如
sed -e "s/(^.{89})($)/\1 \2/" file.txt
sed -e "s/(^.{89})($)/\1\s\s\s\s\2/" file.txt
sed -e "s/(^.{89})($)/\1\ \ \ \ \2/" file.txt
sed -e "s/\(^.\{89\}\)\($\)/\1\ \ \ \ \2" file.txt
sed -e 's/\(^.\{89\}\)\($\)/\1[[:space:]]\2/g' file.txt
sed -e 's/\(^.\{89\}\)\($\)/\1[[:space:]]\{4\}\2/g' file.txt
sed -e 's/(^.{89})($)/\1[[:space:]]{4}\2/g' file.txt
答案 0 :(得分:0)
这里的主要问题是您使用的是BRE POSIX语法,未转义的(
/ )
被视为文字括号,而未转义的{
/ }
被视为文字括号大括号。
这应该有效:
sed 's/^.\{89\}$/& /' file.txt > newfile.txt
这里:
^
-匹配一行的开头.\{89\}
-匹配任何89个字符$
-声明行的结尾。替换中的&
是指整个比赛。
如果您需要使用-i
选项,请参见sed edit file in place。
答案 1 :(得分:0)
尝试一下:
awk '{ <br>
diff = 89 - length($0); <br>
for(i=1;i<=diff; i++) <br>
{ <br>
$0 = $0 "a" <br>
} <br>
print $0 <br>
} <br>
' FileName.txt
答案 2 :(得分:0)
基于its manuals的,适用于HP-UX的软件工具:
sed 's/.*/ /' file | paste -d ' ' file - | cut -c 1-93
工作原理:
sed
创建一个虚拟流,该虚拟流的行数与 file 相同,但每行有四个空格。paste
将虚拟流附加到文件 中。 (由于-d ' '
会添加 5 个空格,但这没什么关系。)cut
截取超过 93 个字节的任何内容。如果 HP-UX sed
比我想象的更像 GNU sed
,则可以用类似的替代品替换:
yes ' ' | head -n $(wc -l < file) | paste -d ' ' file - | cut -c 1-93