我正在将文件从 OpenVMS 服务器传输到 Unix 服务器,有一个 VMS 程序逐条记录地读取该文件,定义记录长度为 320,然后从中删除所有 ASCII 20 字符每条记录结束。我如何使用 KSH 脚本执行此操作?
我只是想逐条记录地读取一个文件,从每条记录中的位置 320 剥离所有 ascii 20 字符,回到有实际好字符的地方(记录的真正结尾),然后将其写到一个新的文件。
提前致谢!
编辑:我在 AIX 6 上
最佳答案
你可以使用 sed:
sed -i -r 's/(.{319})\x14(.*)$/\1\2/' file
此命令将首先读取 319 个字符,然后是 \x14
(ASCII 20),然后是该行的其余部分。然后它将放回匹配组#1 和匹配组#2。这将遗漏\x20
。
-i
标志(内联)将保存更改的文件。
编辑:在 AIX 上尝试这个 sed:
sed 's/\(.\{319\}\)'$'\x14''\(.*\)$/\1\2/' file > _temp && mv _temp file
最终解决方案:经过调查(见评论)后发现文件有尾随空格(十六进制 20)而不是 ASCII 20。一旦建立,以下解决方案就起作用了:
sed 's/ *$//' file > _temp && mv _temp file
关于linux - Kshell 读取文件并定义记录长度,然后从每条记录的末尾去除 ascii 20 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976395/