在第一次匹配之前插入行的命令

时间:2015-05-22 00:19:28

标签: linux awk sed

我的文件包含以下信息

testing
testing
testing

我想使用sed或任何linux命令

在第一个测试词之前插入一个单词(已测试)

需要获得像

这样的输出
tested
testing
testing
testing

由于

3 个答案:

答案 0 :(得分:8)

提供基于awk的替代方案,更易于理解:

awk '!found && /testing/ { print "tested"; found=1 } 1' file
  • found用于跟踪是否找到testing的第一个实例(变量found,与任何Awk变量一样,默认为0,即布尔上下文中的false
  • 因此,
  • /testing/会匹配包含testing第一个行,并处理相关的块:
    • { print "tested"; found=1 }打印所需的文字并设置找到第一条testing行的标记
  • 1{ print }的常用简写,即只是按原样打印当前输入行。

答案 1 :(得分:7)

完全:

sed '0,/testing/s/testing/tested\n&/' file

对于包含"测试":

的行
sed '0,/.*testing.*/s/.*testing.*/tested\n&/' file

对于以"测试"

开头的行
sed '0,/^testing.*/s/^testing.*/tested\n&/' file

对于以"测试"结尾的行:

sed '0,/.*testing$/s/.*testing$/tested\n&/' file

使用结果add" -i"来更新文件的内容,例如:

sed -i '0,/testing/s/testing/tested\n&/' file

答案 2 :(得分:6)

这可能适合你(GNU sed):

sed -e '/testing/{itested' -e ':a;n;ba}' file

tested的第一个匹配项之前插入testing,然后使用循环来读取/打印文件的其余部分。

或者使用GNU特定的:

sed '0,/testing/itested' file