替换文件中一行中的一个单词

时间:2013-12-20 20:19:13

标签: unix sed

我知道我可以使用sed用不同的单词替换文件中的单词。但是,如果我有一个单词可能会在文件中出现多次,我只想在特定的行中更改它,最后。 让我说我有

hello unix world olga unix olga unix 
hello unix 2013 world
假设我知道行的编号,如何替换第一行中的第二个“unix”并保留其他行? 所有表达式以及行号都保存在变量

5 个答案:

答案 0 :(得分:0)

如果它在第一行,您可以使用:

sed '1s/unix/windows/' < input.txt

如果您想要替换 unix 第一次,则该任务会更复杂一些。理论上,sed允许将匹配号指定为:

sed 's/unix/windows/1' < input.txt

然而,它是不便携的,很难依赖。使用更具体的模式(假设这样的行确实具有唯一模式)或使用awk或其他一些脚本语言可能更容易。

答案 1 :(得分:0)

您可以将搜索模式扩展为仅包含您要查找的内容。

在您的情况下,您可以寻找

sed 's/unix$/windows/' 

其中说,在行unix的末尾搜索$并将其替换为windows

答案 2 :(得分:0)

sed '1s/unix$/windows/' file

它仅在第一行进行替换,并且只对最后一个单词进行替换,如果它是unix

如果您想进行就地替换,请使用sed -i 's/...' file

答案 3 :(得分:0)

如果行的末尾出现“unix”,则将第1行中的“unix”替换为“windows”:

sed 's1/unix$/windows/' input_file > output_file

s1将匹配限制在第1行

$将匹配约束到行尾

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed '1s/unix/whatever/2' file