我正在使用SQLPlus执行sql脚本,但是我有一个错误,因为脚本的某些行超过2000个字符。
所以我想在每行上用'
替换第2000个字符前的空格\n
,但我不知道该怎么做。
有人有想法吗?
感谢您的帮助,
史蒂夫答案 0 :(得分:2)
此示例应在第一个逗号分隔非常长的行,然后将空格分隔到位置>1900
。所有短于1900个字符的行都将保持不变。
cat file.sql | sed -n 's/^\(.\{1900\}[^,]*,\) \(.*$\)/\1\n\2/gp; /^.\{1,1899\}$/p'
它不会将任何行分成2个以上[例如但是,如果一行是5000个字符长。因此,根据您对最长行的期望长度,请尝试连续多次运行[file.sql
被最新运行的输出覆盖,显然......]
编辑: ,请注意长度超过1900个字符的行的特殊情况,但是从字符开始没有任何逗号# 1900。这些行(例如“ [...~1900 characters of...] comma, seperated, stuff [exceeding position 1900] followed by anything but expected seperator EOL
”)完全被上述解决方案完全忽略[甚至不打印]。但是,对那些要妥善处理的修改应该很容易。
答案 1 :(得分:0)
使用gawk 4.0,我在40个字母上进行了测试,你可以用2000替换。
awk '{r=substr($0,41);s=substr($0,1,40);s=gensub(/,([^,]*)$/,"\n\\1","g",s);print s r}' file
这个想法是,将该行分为两个字符串:s
(前40个字符)r
(其余),然后使用s来替换最后,
以返回{ {1}}
测试文件内容:
\n
使用fold命令帮助理解您的问题。
hrsjdf,lkjajflkjafkljklfj,asdfadfk,afef=",/foa
jdf,lkjajflkjafkljklfj,asdfadfk,afef=",/foaasdfdf
所以第一行,我们需要在$ fold -w40 < file
hrsjdf,lkjajflkjafkljklfj,asdfadfk,afef=
",/foa
jdf,lkjajflkjafkljklfj,asdfadfk,afef=",/
foaasdfdf
之前添加一个返回,第二行应该在/
结果如下:
afef=
答案 2 :(得分:0)
sed ': beg
s/\(.\{250\}\)\{8\}/&\
/
t long
b
: long
s/^\(.*\), \([^,]*\)\(\n\)/\1\3\2/
P
s/.*\n//
b beg
' YourFile
某些SED的限制解决方案,模式缓冲区大小限制为255个字符(因此2000个字符最大值为\(.\{250\}\)\{8\}
)
普林西:
\n
来切割线来获取max 2000 char的原始行。如果没有剪切,请外出(并打印内容),
并将其替换为结尾\n