替换选项:sed 命令中的 s [重复]
Posted
技术标签:
【中文标题】替换选项:sed 命令中的 s [重复]【英文标题】:Substitution option: s in sed command [duplicate] 【发布时间】:2014-05-31 16:34:35 【问题描述】:我在文件中使用 sed 命令进行替换。 假设我的 file1 是:
10
11
10
11
然后我想将file1中的第一个“10”替换为“12”,然后转储到file2。 file2 应该是:
12
11
10
11
我试过这个命令:
sed 's/10/12/' file1 >file2
但它也改变了第二个“10”。那么,我该如何编写 sed 命令来做到这一点呢?
【问题讨论】:
【参考方案1】:如果您可以使用 awk 代替 sed,您可以像这样拥有更多控制权:
awk '!changed && /10/ sub(/10/, "12"); changed = 11' file1
12
11
10
11
【讨论】:
【参考方案2】:尝试:
sed '0,/10/s/10/12/' file1 >file2
【讨论】:
这将完成这项工作,但您应该解释它的作用以及它完成工作的原因。【参考方案3】:就像 GriffinG 说的,你可以这样做:
sed '0,/10/ s/10/12/' file1 > file2
开头的0,/10/
设置了以下替换命令的界限。它说从第 0 行(第一行)开始,一直到与模式 /10/
匹配的一行。因此,在第一次匹配之后,sed
将停止处理该替换。
【讨论】:
0,/.../
仅适用于 GNU sed【参考方案4】:
如果您没有 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/
,因此不需要额外的空行
【讨论】:
以上是关于替换选项:sed 命令中的 s [重复]的主要内容,如果未能解决你的问题,请参考以下文章
通过 ssh 连接的 sed + `s' 的未知选项 [重复]