我想用文本文件中所有位置的字符串替换给定的整数。 (例如,13 13.0353
,13
应替换为Al
,提供Al 13.0353
。)如何使用sed执行此操作?
答案 0 :(得分:2)
要替换包含13的字段,您可以
sed -E 's/(^|\s)13($|\s)/\1A1\2/g' file
awk '{for(i=1;i<=NF;i++)if($i==13)$i="A1"}1' file
perl -pe 's/(^|\s)\K13($|\s)/A1$2/g' file
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