使用 sed 或 awk 修改文件
modifying a file using sed or awk
我有一个格式如下的文件
A something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
每当我在第一列中得到 A 时,我想添加一行所有值都相同的行,假设用 Z 替换 A。最终文件应该是:
A something_A something_A something_A
Z something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
如何在 bash 中使用 sed/awk 执行此操作?
awk '~/A/{print;sub(/A/,"Z")}1' File
样本:
AMD$ cat File
A something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
AMD$ awk '~/A/{print;sub(/A/,"Z")}1' File
A something_A something_A something_A
Z something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
检查第一个字段是否匹配 A (~/A/
)。如果匹配,则按原样打印该行,将同一行中的第一个 A
替换为 Z
。这将再次打印。 1
用于最后打印不匹配的行。
通过sed,
$ sed -i 's/^\( *\)A\( \+.*\)/&\nZ/' file
A something_A something_A something_A
Z something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
&
打印整个匹配项。 ^\( *\)
将捕获领先的 space。将上述正则表达式中的 spaces 更改为 [[:space:]]
或 [[:blank:]]
。因为上面正则表达式中的 space 不会匹配制表符。添加内联编辑 -i
参数以保存对该文件所做的更改。
我有一个格式如下的文件
A something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
每当我在第一列中得到 A 时,我想添加一行所有值都相同的行,假设用 Z 替换 A。最终文件应该是:
A something_A something_A something_A
Z something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
如何在 bash 中使用 sed/awk 执行此操作?
awk '~/A/{print;sub(/A/,"Z")}1' File
样本:
AMD$ cat File
A something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
AMD$ awk '~/A/{print;sub(/A/,"Z")}1' File
A something_A something_A something_A
Z something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
检查第一个字段是否匹配 A (~/A/
)。如果匹配,则按原样打印该行,将同一行中的第一个 A
替换为 Z
。这将再次打印。 1
用于最后打印不匹配的行。
通过sed,
$ sed -i 's/^\( *\)A\( \+.*\)/&\nZ/' file
A something_A something_A something_A
Z something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
&
打印整个匹配项。 ^\( *\)
将捕获领先的 space。将上述正则表达式中的 spaces 更改为 [[:space:]]
或 [[:blank:]]
。因为上面正则表达式中的 space 不会匹配制表符。添加内联编辑 -i
参数以保存对该文件所做的更改。