我在文件中使用sed命令make替换。 假设我的file1是:
10
11
10
11
然后我想替换第一个" 10"在file1到" 12",并转储到file2。 file2应为:
12
11
10
11
我试过这个命令:
sed 's/10/12/' file1 >file2
但它改变了第二个" 10"也。那么,我怎样才能编写sed命令呢?
答案 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/
因此不需要额外的空行