我有一个格式如下的文件
A something_A something_A something_A
B something_B something_B something_B
C something_C something_C something_C
每当我在第一列中得到A时,想要添加一行,其中所有值都相同,而A替换为让我们说Z.最终文件应为:
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
如何使用sed / awk在bash中执行此操作?
答案 0 :(得分:4)
通过sed,
$ sed -i 's/^\( *\)A\( \+.*\)/&\n\1Z\2/' 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:]]
或[[:blank:]]
。因为上面的正则表达式中的空格不匹配标签。添加内联编辑-i
参数以保存对该文件所做的更改。
答案 1 :(得分:3)
awk '$1~/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 '$1~/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($1~/A/
)匹配。如果匹配,请按原样打印该行,请将同一行中的第一个A
替换为Z
。这将再次打印。最后用1
打印出无法匹配的行。