gpt4 book ai didi

regex - 如果该行不包含使用 sed 的另一个字符串,则将文本插入该行

转载 作者:行者123 更新时间:2023-11-29 09:29:18 25 4
gpt4 key购买 nike

我正在 linux 服务器上合并一些文本文件,但有些行略有不同,我需要统一它们。

例如一些文件会有这样的行

id='1244' group='american' name='fred',american

其他文件会这样

id='2345' name='frank', english

最后别人会喜欢

id='7897' group='' name='maria',scottish

我需要做的是,如果 group='' 或 group 根本不在字符串中,我需要将其添加到逗号之前的某处,将其设置为逗号之后的文本,因此在上面的第二个示例中,该行将成为:

id='2345' name='frank' group='english',english

和最后一个例子一样

id='7897' name='maria' group='scottish',scottish

这将进入 bash 脚本。我实际上无法删除该行并将其添加到文件末尾,因为它与下一行相关。

我使用了以下内容:

sed -i.bak 's#group=""##' file 

这会删除 group=""字符串,因此这些行将包含 group='something' 或根本不包含它并且有效

然后我尝试使用以下方法添加该组(如果它不存在):

sed -i.bak '/group/! s#,(.*$)#group="\1",\1#' file

但这会引发错误

sed: -e expression #1, char 38: invalid reference \1 on `s' command's RHS

EDIT 由 Ed Morton 创建单个示例输入文件和预期输出:

示例输入:

id='1244' group='american' name='fred',american
foo
id='2345' name='frank', english
bar
id='7897' group='' name='maria',scottish

预期输出:

id='1244' group='american' name='fred',american
foo
id='2345' name='frank' group='english',english
bar
id='7897' name='maria' group='scottish',scottish

最佳答案

sed -r "
/group=''/ s/// # group is empty, remove it
/group=/! s/,[[:blank:]]*(.+)/ group='\\1',\\1/ # group is missing, add it
" file
id='1244' group='american' name='fred',american
foo
id='2345' name='frank' group='english',english
bar
id='7897' name='maria' group='scottish',scottish

foo 和 bar 行未被修改,因为 s///命令不匹配逗号后跟字符。

关于regex - 如果该行不包含使用 sed 的另一个字符串,则将文本插入该行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698095/

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