如何在bash中用一组特定的条件查找和替换字符串

如何在bash中用一组特定的条件查找和替换字符串,bash,sed,replace,scripting,Bash,Sed,Replace,Scripting,我有一个文件夹,其中包含另一组文件夹,每个文件夹都有一个.csv文件,需要对其进行更改 我想寻找一个特定的字符串并替换它 我的csv文件的示例是 二十、 1,2,3,4,AA,BB,5,6 YY,5,6,7,5,CC,DD,9,10 我希望将AA(第6个位置)替换为“AA、bb、cc”,仅适用于第一个单词为XX的行 我想用“CC,dd,ee”替换CC(如果我使用分隔符,则为第6个位置,与前一行相同),仅用于第一个单词为YY的行 如何对所有文件夹进行递归搜索,仅在.csv文件中搜索这些字符串并进行

我有一个文件夹,其中包含另一组文件夹,每个文件夹都有一个.csv文件,需要对其进行更改

我想寻找一个特定的字符串并替换它

我的csv文件的示例是

二十、 1,2,3,4,AA,BB,5,6

YY,5,6,7,5,CC,DD,9,10

我希望将AA(第6个位置)替换为“AA、bb、cc”,仅适用于第一个单词为XX的行 我想用“CC,dd,ee”替换CC(如果我使用分隔符,则为第6个位置,与前一行相同),仅用于第一个单词为YY的行

如何对所有文件夹进行递归搜索,仅在.csv文件中搜索这些字符串并进行更改

#!/bin/bash
file=test1.txt
IFS=$','
for i in `cat $file`
do
  echo "the name of the file I am going to is"
  echo "$i"
#add logic to look for "line beginning with XX and replace the 6th word in that line      
sed -e 's/^XX.\{0\}/replacedAB/' $i
done
test1.txt包含.csv文件的路径

我正在使用/bin/bash,我的版本是4.1.2(1)


我们是否可以使用sed或read命令来替换以XX开头的行中的字符串?

我建议您首先使用
grep
来构建“detect”表达式。如果输出到屏幕或指定
--color=always
,则可以在输出中看到匹配的表达式

然后在要保留的检测表达式的位周围添加分组括号,并将其转换为
sed
,以保留所需的每个位,并为不需要的位插入替换项


就是这样。

你试过什么?如果我们不知道您当前解决问题的方法,我们无法帮助您提高脚本知识。您所描述的内容可以通过
sed
awk
脚本解决。您可能希望查看位于的教程。祝你好运。你能帮我从提取包含XX的行开始,并替换该行中的字符串吗?这可能太具体了,在任何实际场景中都无法工作,但是
sed s/XX/replacement/
。谢谢你的回复:)我确实理解sed的用法,但我不知道如何替换包含“XX”的行中的字符串而不是字符串“XX”本身: