如何用sed只替换一个特定的整数?

时间:2017-05-18 08:38:40

标签: bash sed

我想用文本文件中所有位置的字符串替换给定的整数。 (例如,13 13.035313应替换为Al,提供Al 13.0353。)如何使用sed执行此操作?

5 个答案:

答案 0 :(得分:2)

要替换包含13的字段,您可以

SED

sed -E 's/(^|\s)13($|\s)/\1A1\2/g' file

AWK

awk '{for(i=1;i<=NF;i++)if($i==13)$i="A1"}1' file

perl的

perl -pe 's/(^|\s)\K13($|\s)/A1$2/g' file

perl(2)

perl -lane 's/^13$/A1/ for @F;print join " ",@F' file

输入

baju 213 anyu 13 apu 13 papa 13.0353 12.130353

输出

baju 213 anyu A1 apu A1 papa 13.0353 12.130353

答案 1 :(得分:1)

您可以使用以下命令:

echo '13  13.0353' | sed 's/^13/Al/g'

输出:

Al  13.0353

添加^将匹配文字的开头

更新

要删除字符串中13的前两个匹配项,请使用以下命令:

echo 'anyu 13 apu 13 papa 13.0353' | sed -e 's/13/Al/1' -e 's/13/Al/1'

输出:

anyu Al apu Al papa 13.0353

全局匹配的另一个例子,如果有任何两个数字而不仅仅是13你可以使用它:

echo 'anyu 13 apu 13 papa 13.0353' | sed -e 's/[0-9][0-9]/Al/1' -e 's/[0-9][0-9]/Al/1'

替换文字中的所有13

echo 'anyu 13 apu 13 papa 13.0353' | sed -E 's/(^|\s)13(\s|$)/\1Al\2/g'

或者这个用于匹配任何其他两个数字而不仅仅是13

echo 'anyu 13 apu 13 papa 13.0353' | sed -E 's/(^|\s)[0-9][0-9](\s|$)/\1Al\2/g'

答案 2 :(得分:0)

一种方式:

echo "13 anyu 13 apu 13 papa 13.130353 15.13 13" | sed 's/\(^\|\s\)13\(\s\|$\)/ A1 /g' | xargs

匹配数字13,后跟空格或EOL。

另一个角落案例 - 匹配现在必须以空格或SOL开头。还可以穿过xargs来修剪前导和尾随空白区域。

答案 3 :(得分:0)

简单:

sed -r 's/13([^.])/Al\1/g' file

答案 4 :(得分:0)

我喜欢awk解决方案:

awk '{for(i=1;i<=NF;i++)if($i==13)$i="A1"}' file