gpt4 book ai didi

regex - Linux中的SED命令用脚本编辑文件

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:28 26 4
gpt4 key购买 nike

我有一个文件名 temp.txt ,内容为

ANSWER "1234:IDGK"
ANSWER "123456:DEF"

我需要使用脚本中的输入参数更改答案“1234:$1”。现在,我正在脚本( run.sh )中使用下面的代码来更改 temp.txt 中的内容

#!/bin/bash

Prompt1=$1

sed -i -e "s/\(1234:\).*/\1$1/" temp.txt

但是当我使用任何输入值运行脚本时{不考虑值的长度} " 会被覆盖在 temp.txt 中。

例如

./run.sh ABCDEF 

temp.txt 更新为

ANSWER "1234:ABCDEF
ANSWER "123456:DEF"

预期输出是

ANSWER "1234:ABCDEF"
ANSWER "123456:DEF"

注意:文件中的输入值总是不相同,所以我不能使用

sed s/IDGK/ABCDEF/g

请建议正确的 SED 命令,该命令将替换唯一的文本,而不是 "

最佳答案

由于您不希望删除尾随双引号,因此需要将其从替换中排除。例如:

sed -i -e "s/\(1234:\).*\(.\)/\1$1\2/"  temp.txt

第二个捕获匹配该行的最后一个字符,即双引号。

或者:

sed -i -e 's/\(1234:\)[^"]*'"/\1$1/"  temp.txt

不匹配任何字符,只匹配非双引号的字符。请注意使用单引号和双引号以确保否定字符类中的双引号是双引号。或者再次:

sed -i -e "s/\(1234:\)[^\"]*/\1$1/"  temp.txt

这会用反斜杠转义双引号。这不是我会做的方式,但它会工作得很好。

关于regex - Linux中的SED命令用脚本编辑文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28205331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com