替换选项:s在sed命令中

时间:2014-04-16 16:56:39

标签: sed

我在文件中使用sed命令make替换。 假设我的file1是:

10
11
10
11

然后我想替换第一个" 10"在file1到" 12",并转储到file2。 file2应为:

12
11
10
11

我试过这个命令:

sed 's/10/12/' file1 >file2

但它改变了第二个" 10"也。那么,我怎样才能编写sed命令呢?

4 个答案:

答案 0 :(得分:1)

如果你可以使用awk而不是sed,你可以拥有更多这样的控制:

awk '!changed && /10/ { sub(/10/, "12"); changed = 1}1' file1
12
11
10
11

答案 1 :(得分:1)

尝试:

sed '0,/10/s/10/12/' file1 >file2

答案 2 :(得分:1)

像格里芬说的那样,你可以这样做:

sed '0,/10/ s/10/12/' file1 > file2

开头的0,/10/设置以下替换命令的边界。它表示从第0行(第一行)开始,直到与模式/10/匹配的行。因此,在第一场比赛之后,sed将停止处理该替换。

答案 3 :(得分:1)

如果您没有GNU sed,请尝试:

echo | cat - file | sed '1,/10/s/10/12/; 1d'

sed '1,/10/s/10/12/; 1d' << EOF

$(cat file)
EOF

bash / ksh93

sed '1,/10/s/10/12/; 1d' <(echo; cat file)

GNU sed知道0,/10/因此不需要额外的空行