【问题标题】:How to find and replace a string with a particular set of conditions in bash如何在bash中查找和替换具有特定条件集的字符串
【发布时间】:2019-03-30 06:23:50
【问题描述】:

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

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

我的 csv 文件示例是

XX,1,2,3,4,AA,BB,5,6...

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

我希望将 AA(第 6 个位置) 替换为 "aa,bb,cc" 仅适用于第一个单词是 XX 的那些行 我希望将 CC(如果我使用分隔符,则与上一行相同,则为第 6 个位置)替换为“cc,dd,ee”,仅适用于第一个单词为 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 开头的行中的字符串?

【问题讨论】:

  • 你试过什么?如果我们不知道您当前解决问题的方法是什么,我们将无法帮助您提高脚本知识。您所描述的可以通过sed 或awk 脚本解决。您可能想查看grymoire.com/Unix 的教程。祝你好运。
  • 你能帮我从获取有 XX 的行并替换该行中的字符串来启动它吗
  • 这可能过于具体,无法在任何实际场景中使用,但sed s/XX/replacement/。
  • 感谢您的回复:) 我确实了解 sed 的使用,但我不明白如何替换包含“XX”而不是字符串“XX”本身的行中的字符串跨度>

标签: bash sed replace scripting


【解决方案1】:

我建议您最初使用grep 来构建“检测”表达式。如果您输出到屏幕或指定--color=always,您可以在输出中看到突出显示的匹配表达式。

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

就是这样。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多