【问题标题】:Edit (sed) specific line in a file where a string occurs编辑(sed)文件中出现字符串的特定行
【发布时间】:2020-03-30 09:23:23
【问题描述】:

我有一个充满文本文件的文件夹,我想用 grep 查找特定的字符串,然后通过 sed 在该特定行的开头添加一个字符串(比如说“+”)(在搜索字符串所在的所有位置)发生)。

到目前为止,我得到了这个:

if grep -q &MyString /path/to/folder/* ; then
echo "String detected"
sed 's/^/+ /g' -i [what to put in here?]
fi

根据我放在括号中的内容,它要么在每个文本文件的每一行前面添加字符串,要么什么都不做,因为我没有定义正确的文件。我将如何引用我之前检测到字符串的文件?

谢谢

【问题讨论】:

    标签: bash shell search sed grep


    【解决方案1】:
     grep -l &MyString /path/to/folder/* | uniq | while read line
     do 
         echo "String detected"
         sed '/&MyString/ s/^/+ /g' -i $line
     done
    

    使用 grep 和 -l 仅打印文件名,使用 uniq 进行重复数据删除,然后读取输出的每一行。从输出中取出每一行,用它来表示 sed ($line) 中的文件名。

    在 $(grep ...) 中使用读取行而不是 var,因为这会导致文件中包含空格的问题,因为输出中的每个空格分隔变量都将用于表示文件名。

    【讨论】:

    • 它只编辑文件而不是特定行,有什么建议吗?
    • 更改您的 sed 命令以考虑您正在搜索的字符串。我会编辑答案
    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 2011-08-07
    • 2021-06-19
    • 2016-09-09
    • 1970-01-01
    • 2016-08-24
    • 2016-03-20
    • 1970-01-01
    相关资源
    最近更新 更多