替换选项:sed命令中的s
我正在使用sed命令在文件中进行替换。 假设我的文件1是:替换选项: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/,
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
将停止处理该替换。如果您没有GNUsed
,请尝试:
echo | cat - file | sed '1,/10/s/10/12/; 1d'
或
GNU sed知道
0、/10/
,因此不需要额外的空行如果您没有GNUsed
,请尝试:
echo | cat - file | sed '1,/10/s/10/12/; 1d'
或
GNU sed知道
0,/10/
因此不需要额外的空行这将完成任务,但您应该解释它做什么以及为什么完成任务。这将完成任务,但您应该解释它做什么以及为什么完成任务。0,/…/
仅是GNU sed0,/…/
仅是GNU sed