我的文件包含以下信息
testing
testing
testing
我想使用sed或任何linux命令
在第一个测试词之前插入一个单词(已测试)需要获得像
这样的输出tested
testing
testing
testing
由于
答案 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