linux - 用于替换两个分隔符位置之间的任何内容的 unix 命令

标签 linux

请帮助我使用 unix 命令来替换两个分隔符位置之间的任何内容。 例如:我有多个带有以下标题数据的文件,我想替换第 9 和第 10 位置处 * 分隔符之间的数据

ISA*00*          *00*          *ZZ*80881          *ZZ*TNC0022        *190115*1237*^*00501*000320089*0*P*|~

我的输出应该是这样的:

ISA*00*          *00*          *ZZ*80881          *ZZ*TNC0022        *190327*1237*^*00501*000320089*0*P*|~

最佳答案

试试这个:

perl -pe 's/^((?:[^*]*\*){9})([^*]+)(.*)/${1}190327$3/'

正则表达式搜索 9 次出现 {9} 的任何内容,但不是星号 [^*] 后跟星号 \* 并将所有内容存储在第一个捕获组中。第二次捕获至少有一个字符不是星号 [^*]+。第三个捕获是该行的其余部分。

匹配的行将被第一部分 ${1}、新值 190327 和第三部分 $3 替换。

关于linux - 用于替换两个分隔符位置之间的任何内容的 unix 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382373/

相关文章:

linux - 预定义范围内的 Shell 变量值

linux - 以增量方式在一组文件上实现 bash 脚本

使用别名运行的 Python

linux - 如何用awk合并2个表

c - C中的问题使用内存

linux - 使用 FFMPEG 录制来自两个麦克风的音频和来自一个网络摄像头和多路复用器的视频

linux - linux 中的 jobs 和 ps 命令有什么区别?

c - semop 调用中 EIDRM 和 EINVAL errno 之间的区别

linux - 将脚本作为 cron 作业运行不显示数据。

linux - 如何在 tmux 布局中设置 "main window"的最大宽度?