使用sed或awk修改文件

时间:2015-01-21 08:04:43

标签: bash awk sed

我有一个格式如下的文件

    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中执行此操作?

2 个答案:

答案 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打印出无法匹配的行。