如何在linux终端上替换多个文件中的一行? [复制]

Posted

技术标签:

【中文标题】如何在linux终端上替换多个文件中的一行? [复制]【英文标题】:How to replace one line in multiple file on linux terminal? [duplicate] 【发布时间】:2021-02-12 15:34:03 【问题描述】:

我有一个包含多个文件的文件夹,每个文件都包含一个类似的字符串

  "tree": "/a/anything-here/b/"

对于每个文件,我需要用字符串替换内部 "//" 之间的内容,在这种情况下 "anything-here"

我使用sed 命令没有成功,你能帮帮我吗?

sed -i 's/"root": a/b" .

【问题讨论】:

看起来像 JSON 字段?不要使用像 sed 这样的非语法感知解析器以防万一 【参考方案1】:

你可以使用这个 sed:

s='"tree": "/a/anything-here/b/"'
sed -E 's~"(/[^/]*/)[^/]*/~\1new-string/~' <<< "$s"
"tree": /a/new-string/b/"

或者使用awk:

awk -v str='new-string' 'BEGINFS=OFS="/" $3 = str 1' <<< "$s"
"tree": "/a/new-string/b/"

【讨论】:

以上是关于如何在linux终端上替换多个文件中的一行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在linux终端上一行编译运行?

如何在没有sed的情况下替换csv文件中的一行[重复]

linux sed 替换

如何在linux命令行中替换多个文件中的字符串

如何在linux命令中替换多个文件中的字符串

如何用sed命令替换一行中的某个字符串