linux - Kshell 读取文件并定义记录长度,然后从每条记录的末尾去除 ascii 20 个字符

标签 linux scripting sed awk ksh

我正在将文件从 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

sed 的

-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/

相关文章:

linux - 运行 Web 服务器 (lightttpd) 和 (curl) 客户端的 Linux 服务器上的隔离测试网络

以原子方式创建文件

javascript - iPhone 的脚本替代方案?

python - 在没有外部库的情况下在 Python 中编写 git 命令脚本

linux - 庆典 shell : syntax error near unexpected token `else'

python - sed to python替换a中的额外分隔符

c - 使用 sed 检测和连接多行结构

python - 删除以 @ 开头的每行的最后一个字符

linux - 为 PBS Pro 创建共享空间

c++ - 在 C++ 中录制时从设备获取音量