替换选项:sed命令中的s

替换选项:sed命令中的s,sed,Sed,我正在使用sed命令在文件中进行替换。 假设我的文件1是: 10 11 10 11 然后我想将file1中的第一个“10”替换为“12”,并转储到file2。文件2应为: 12 11 10 11 我试过这个命令: sed 's/10/12/' file1 >file2 但它也改变了第二个“10”。那么,我如何编写sed命令来实现这一点呢?如果您可以使用awk而不是sed,那么您可以拥有如下更多控制: awk '!changed && /10/ { sub(/10/,

我正在使用sed命令在文件中进行替换。 假设我的文件1是:

10
11
10
11
然后我想将file1中的第一个“10”替换为“12”,并转储到file2。文件2应为:

12
11
10
11
我试过这个命令:

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

但它也改变了第二个“10”。那么,我如何编写sed命令来实现这一点呢?

如果您可以使用awk而不是sed,那么您可以拥有如下更多控制:

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

如果您可以使用awk而不是sed,那么您可以获得如下更多控制:

awk '!changed && /10/ { sub(/10/, "12"); changed = 1}1' file1
12
11
10
11
sed '0,/10/ s/10/12/' file1 > file2
尝试:

尝试:


正如GriffinG所说,你可以这样做:

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

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

如GriffinG所说,您可以这样做:

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

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

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

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


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

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

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


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

这将完成任务,但您应该解释它做什么以及为什么完成任务。这将完成任务,但您应该解释它做什么以及为什么完成任务。
0,/…/
仅是GNU sed
0,/…/
仅是GNU sed