mattiav27 Asked: 2019-09-02 09:37:40 +0800 CST2019-09-02 09:37:40 +0800 CST 2019-09-02 09:37:40 +0800 CST 如何修改包含第二次出现的字符串的行? 772 这篇文章解释了如何在终端的文件开头添加一行。但是,如果我不知道它是哪一行,如何从终端修改文件中某处的行? 我应该修改该行eni=10.*10**9以eni=10.*10**8记录指数。这是第二次eni出现 command-line 3 个回答 Voted Best Answer schrodingerscatcuriosity 2019-09-02T10:30:32+08:002019-09-02T10:30:32+08:00 我认为这就是你想要的: line=$(grep -n -m2 "eni" file | tail -n1 | cut -f1 -d:) sed -i $line's/9$/8/' file steeldriver 2019-09-02T15:08:09+08:002019-09-02T15:08:09+08:00 由于 Ubuntu 现在附带 GNU Awk v4.0+(它提供了一个inplace模块),您可以执行类似的操作 gawk -i inplace '/eni=/ {if (++c == 2) sub(/10\*\*9/,"10**8")} 1' file 您可以根据需要制作正则表达式/eni=/和//10\*\*9/或或多或少具体。 同样在 perl perl -i -pe 'if (/eni=/) {s/10\*\*9/10\*\*8/ if (++$c == 2)}' file Kulfy 2019-09-02T11:12:50+08:002019-09-02T11:12:50+08:00 使用sed: sed -i ': 1 ; N ; $!b1 ; s/eni\=10\.\*10\*\*9/eni\=10\.\*10\*\*8/2' filename /是分隔符之一,\是转义字符。\用于使 bash 不会将特殊字符解释为某些命令,例如*通配符。
我认为这就是你想要的:
由于 Ubuntu 现在附带 GNU Awk v4.0+(它提供了一个
inplace
模块),您可以执行类似的操作您可以根据需要制作正则表达式
/eni=/
和//10\*\*9/
或或多或少具体。同样在 perl
使用sed:
/
是分隔符之一,\
是转义字符。\
用于使 bash 不会将特殊字符解释为某些命令,例如*
通配符。