我知道我可以使用sed用不同的单词替换文件中的单词。但是,如果我有一个单词可能会在文件中出现多次,我只想在特定的行中更改它,最后。 让我说我有
hello unix world olga unix olga unix
hello unix 2013 world
假设我知道行的编号,如何替换第一行中的第二个“unix”并保留其他行?
所有表达式以及行号都保存在变量中
答案 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