bash: 如何用文本文件的一部分内容替换整行
bash: How to replace an entire line in a text file by a part of its content
我在 Documentos 文件夹中有一个名为 texto.txt 的文本文件,其值如下所示:
cat ~/Documentos/texto.txt
65f8: Testado
a4a1: Testado 2
所以我想通过使用自定义函数来更改整行,该函数获取新值作为参数。
新值将始终保留前 6 个字符,仅更改后面的字符。虽然我只测试前四个。
然后我编辑了我的 .bashrc,包括我的函数,如下所示。
muda()
{
export BUSCA="$(echo $* | cut -c 1-4)";
sed -i "/^$BUSCA/s/.*/$*/" ~/Documentos/texto.txt ;}
当我运行下面的命令时,它就像一个魅力,但我觉得它可以改进。
muda a4a1: Testado 3
结果:
cat ~/Documentos/texto.txt
65f8: Testado
a4a1: Testado 3
有没有更聪明的方法来做到这一点?也许通过摆脱 BUSCA 变量?
我会写:
muda() {
local new_line="$*"
local key=${newline:0:4}
sed -i "s/^${key//\//\/}.*/${new_line//\//\/}/" ~/Documentos/texto.txt
}
备注:
- 使用
local
变量,未导出环境变量
- 不调用截取,bash可以提取子串
- 转义变量值中的任何斜线,这样 sed 代码就不会被破坏。
我在 Documentos 文件夹中有一个名为 texto.txt 的文本文件,其值如下所示:
cat ~/Documentos/texto.txt
65f8: Testado
a4a1: Testado 2
所以我想通过使用自定义函数来更改整行,该函数获取新值作为参数。 新值将始终保留前 6 个字符,仅更改后面的字符。虽然我只测试前四个。
然后我编辑了我的 .bashrc,包括我的函数,如下所示。
muda()
{
export BUSCA="$(echo $* | cut -c 1-4)";
sed -i "/^$BUSCA/s/.*/$*/" ~/Documentos/texto.txt ;}
当我运行下面的命令时,它就像一个魅力,但我觉得它可以改进。
muda a4a1: Testado 3
结果:
cat ~/Documentos/texto.txt
65f8: Testado
a4a1: Testado 3
有没有更聪明的方法来做到这一点?也许通过摆脱 BUSCA 变量?
我会写:
muda() {
local new_line="$*"
local key=${newline:0:4}
sed -i "s/^${key//\//\/}.*/${new_line//\//\/}/" ~/Documentos/texto.txt
}
备注:
- 使用
local
变量,未导出环境变量 - 不调用截取,bash可以提取子串
- 转义变量值中的任何斜线,这样 sed 代码就不会被破坏。