有选择地替换特定行上的字符
Selectively replace characters on specific lines
我有一个批处理文件,它创建一个文件以上传到 z/OS,连接目录中的所有 Pascal 文件。该文件如下所示:
./ ADD LIST=ALL,NAME=AFTER_W
text
text
text
./ ADD LIST=ALL,NAME=WHATEVER
text
more text
./ ADD LIST=ALL,NAME=A-FILE
text
and other text
./ ADD LIST=ALL,NAME=(C)OPY
text
blah
blah
问题是我无法在 z/OS PDS 成员名称中使用某些字符((
、)
、-
和 _
),所以我需要将这四个字符更改为可接受的内容(C
、C
、#
和 $
),但 仅 在以 ./ ADD
开头的行上。所以对于上面的输入,输出将是:
./ ADD LIST=ALL,NAME=AFTER$W
text
text
text
./ ADD LIST=ALL,NAME=WHATEVER
text
more text
./ ADD LIST=ALL,NAME=A#FILE
text
and other text
./ ADD LIST=ALL,NAME=CCCOPY
text
blah
blah
如果您只想在匹配 ./ ADD
的行上进行这些替换(()-_
到 CC#$
),这就足够了:
sed '/\.\/ ADD /y/()-_/CC#$/' yourinput
此代码将 y
命令¹应用于匹配 ./ ADD
的所有行,其中 .
被转义,因为它是一个元字符,/
被转义,因为它是正则表达式的(不可变的)定界符,其他一切都是文字; y
命令的语法为 y/abc/def/
并将 a
替换为 d
,将 b
替换为 e
,将 c
替换为 f
(分隔符可以更改为其他内容,例如 y!abc!edf!
就可以)。
[1] 是音译命令;我不知道 Y 它被称为 y
,但是 t
被 t
est 命令占用。
我有一个批处理文件,它创建一个文件以上传到 z/OS,连接目录中的所有 Pascal 文件。该文件如下所示:
./ ADD LIST=ALL,NAME=AFTER_W
text
text
text
./ ADD LIST=ALL,NAME=WHATEVER
text
more text
./ ADD LIST=ALL,NAME=A-FILE
text
and other text
./ ADD LIST=ALL,NAME=(C)OPY
text
blah
blah
问题是我无法在 z/OS PDS 成员名称中使用某些字符((
、)
、-
和 _
),所以我需要将这四个字符更改为可接受的内容(C
、C
、#
和 $
),但 仅 在以 ./ ADD
开头的行上。所以对于上面的输入,输出将是:
./ ADD LIST=ALL,NAME=AFTER$W
text
text
text
./ ADD LIST=ALL,NAME=WHATEVER
text
more text
./ ADD LIST=ALL,NAME=A#FILE
text
and other text
./ ADD LIST=ALL,NAME=CCCOPY
text
blah
blah
如果您只想在匹配 ./ ADD
的行上进行这些替换(()-_
到 CC#$
),这就足够了:
sed '/\.\/ ADD /y/()-_/CC#$/' yourinput
此代码将 y
命令¹应用于匹配 ./ ADD
的所有行,其中 .
被转义,因为它是一个元字符,/
被转义,因为它是正则表达式的(不可变的)定界符,其他一切都是文字; y
命令的语法为 y/abc/def/
并将 a
替换为 d
,将 b
替换为 e
,将 c
替换为 f
(分隔符可以更改为其他内容,例如 y!abc!edf!
就可以)。
[1] 是音译命令;我不知道 Y 它被称为 y
,但是 t
被 t
est 命令占用。